当前位置:主页>销售管理软件> 列表

最近写了一个搜索引擎的核心,蜘蛛程序的简单范例(可下载,含 找用友erp软件

财务软件版1楼: 最近写了一个搜索引擎的核心,蜘蛛程序的简单范例(可下载,含Source)
下载地址:
http://www.dcmscn.cn/dispbbs.asp?boardID=7&ID=788&page=1
刚才搞错了,请换地址二下载

2楼: 沙发 如项目管理软件

3楼: 怎么下不了呢

4楼: 不可能吧?
我刚刚上传的呀!

5楼: 还是不成啊

6楼: 现在可以了,刚才搞错地址了!

财务软件版7楼: 下载不了 http://dcmscn.cn/soft/Project1.rar ,
这个是你的下载地址哦

8楼: 最近写了一个搜索引擎的核心,蜘蛛程序的简单范例(可下载,含Source)
下载地址:
http://www.dcmscn.cn/dispbbs.asp?boardID=7&ID=788&page=1
刚才搞错了,请换地址二下载

9楼: 没看到含Source

10楼: 没看见代码啊,就一个exe

11楼: http://dcmscn.cn/soft/Project1.rar 是你这个下载地址不对

12楼: 只有论坛积分达到2000分的人才能看见source下载地址呀! 如库存管理软件

13楼: 嘿,你看看,这不是成心气我吗,我哪偷2000分去啊

财务软件版14楼: faint!

15楼: 晕倒,2000分谁现在去弄哦,服了,哈哈

16楼: to dcms


你有多少分啊???
要达到2000分,你有什么水平啊
你写的程序很牛吗,
有2000分的人,要去看你的程序???????
开玩笑
井底之蛙!!!!!!!!

17楼: 这个dcms人真牛,这些例子网上一大堆,谁有时间去理他??

18楼: 下载不了也不要挖苦别人,不管怎么说,网上有多少,始终别人写了,如果你觉得不值得,你大可以不用管这些的。何必在不管,不喜欢的情况下,还来挖苦一下写代码的人呢?世界上高手永远都很多,但是不允许低手的存在,高手也就要绝种了。

19楼: 晕倒!这不是在做广告吗?

20楼: 建议把源代码贴出来讲讲

财务软件版21楼: 我是说在我的论坛积分达到2000分才可以下载source

22楼: 我知道是你的论坛,但是我要是过去注册一个,也不会马上就有2000分吧,要我怎么看呢 如用友erp软件

23楼: 我现在正在用C#改写我的蜘蛛程序!
有任何疑问请发邮件给我谢谢!

erp2@163.com

24楼: 怎样才能达到2000分呢?
我有个C#的,跟你交换一下。

25楼: [:D]垃圾,呵呵

26楼: TO:" 爱元元的哥哥"
看来你有更好的,你不是垃圾,请拿出来给大家看看呀!

27楼: 无源码啊

财务软件版28楼: 怎么还没发啊大哥,我怎么看啊

29楼: 富翁称号 总积分 本轮得分 专家分 本轮排名 总排名
dcms 100 0 40 605 19478
注册时间 上次来访 登陆次数 提问次数 回复次数 每贴得分
2005-5-23 2006-1-6 189 32 88 .45


净扯淡,想做广告明说不就得了.老子就是不去看. 有本事,你先在大富翁挣2000分再来发布吧.

30楼: 哦,对了楼上的,我忘了说了,分数我从来不要,大富翁上的用户名,我却多的很!

31楼: 吊大家的胃口是吧?

32楼: bu shi hao dong xi

33楼: 扯蛋。

34楼: 大家不要吵啊。还是希望大家能开放一下胸怀啊,广告该做的还是要做,但是请不要太无耻。我就最喜欢看到高质量的东西啊。

财务软件版35楼: 这个广告做的很烂,大家很生气

36楼: 富翁們很生氣,後果很嚴重


我也在學習搜索方面的入門知識,進來學習,白來一趟了

37楼: 呸,什么论坛还要赚2000分才看
赚2000分那时间自己研究都有了,
鄙视

38楼: 说实话,我觉得不错,有个例子已经很不错了,你们还想要代码,也不想想,有本事可以自己写一个出来,给大家公布一下呀!

我觉得dcms能提供一个这样的例子和思路给大家,很值得赞赏,不象有写人就知道一味的索取别人的代码,从不见有什么贡献,有什么资格说别人,有本事自己写一个出来呀!

我支持楼主!

39楼: 顶一下,我觉得大家可能是冤枉了DCMS,我这里是可以下载的,程序应该说只是完成了基本的核心吧,还是有点效果的,不过没有源代码,希望DCMS能放出来,大家分享,分享一部分也可以啊。

40楼: 严重怀疑楼上的楼上是楼主的马甲!

41楼: 不是吧,这个也能怀疑啊,看来现在大富翁的诚信机制需要整顿了。
我在大富翁呆了快5年了,现在居然成了别人的马甲?!

注:这里我在大富翁以来,最无聊的一次辩解。

财务软件版42楼: 1.做人要厚道!

2.要么你给源码,要么你不给,这是你自己的自由和权利!

3.但是不要用“只有论坛积分达到2000分的人才能看见source下载地址”,试问:谁有时间和精力去你的论坛挣2000个积分?此举的目的的纯正性,我很是怀疑!

4.我来这里两个月了,我觉得自己在帮助其它人上面做的问心无愧,也因此获得了3000多分!分数对我来说并不重要,因为我从未打算问人家什么问题!我只是想在帮助别人,或者看别人帮助别人的时候,学些东西!

43楼: 呵呵,支持楼上的

楼主你的做法有点过分

44楼: 顶royal1442

45楼: 说实话,我觉得不错,有个例子已经很不错了,你们还想要代码,也不想想,有本事可以自己写一个出来,给大家公布一下呀!

我觉得dcms能提供一个这样的例子和思路给大家,很值得赞赏,不象有写人就知道一味的索取别人的代码,从不见有什么贡献,有什么资格说别人,有本事自己写一个出来呀!

我支持楼主!

46楼: to 娃娃:请看清楚了

“来自:royal1442, 时间:2006-1-8 0:01:40, ID:3321695 | 编辑
严重怀疑楼上的楼上是楼主的马甲!”

不是说你的!!!!!!!!!

47楼: 这人真烂,不停的提前这个破帖子,想做好你的论坛,做好你的事业,要有阳谋而不是阴谋,小鬼点子耍这么多注定只会展示你的低智商。

48楼: 呵呵,最近发广告的都打在别人帖子里了,一个“顶”字加一大块“签名”,“顶”是皮,
“签名”才是阴阳,所以叫做“皮里阴阳”。

这个人打广告能想出这么个主意,第一表明它是这个论坛的熟客!第二表明是个永没什么作
为的三流货色(给个洞洞它钻,它还要请诸位大哥帮忙解裤带的那种)!第三证明这个论坛
猪头多于人头!至于这里还有某种头争吵起来,实在是聚人气的好事情,楼上的干吗阻止?

财务软件版49楼: 靠!怎么不刷了?说你吊样,你就是吊样,继续刷呀!

娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?


是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》


《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”

50楼: BS一下!

51楼: TO : flamingo,
一天没上来居然有这么多人开始说脏话了呀!
真抱歉,昨天我写了一个刷屏的程序,我不知道我的这个可以固定的程序,居然阻挡了这么多高手的前进道路,在此深表歉意啊!

哈哈............

52楼: 得意什么呀?网站不是我开的,我开的话连你娘的IP、ID都封掉,更不要说是你这头猪了。

嘿嘿,在这个论坛上学到点三脚猫的功夫就开始折腾这个论坛了,可以预计,不久的将来
你就会把你娘干了的!谁让你娘生了你呢?干了你娘后再得意吧!!!!

53楼: TO flamingo 你太没有修养了,上面的话就当是你说给自己听的吧,我不跟你这样的人一般见识!

我相信这里还是有明白事理的人!

54楼: 娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》


否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”

娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?

是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”

娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?


是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”

55楼: 娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?


是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。



【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?

是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?

是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:



吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》


否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》

否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?


是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================

【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”

财务软件版56楼: 娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?


是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?

是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。



【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:



吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》

否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》

否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?


是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。



【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?

是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?

是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:

吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”娱乐一下观众,测试一下自己的症状:


吃西红柿炒蛋时,你常烦恼该先吃西红柿还是先吃蛋吗?
是──→前往《2》
否──→前往《4》

《2》你敢不惧他人的耻笑,牵着驼鸟去逛长安街吗?
是──→前往《3》
否──→前往《6》

《3》你经常为了睡觉时,手要摆在哪里而失眠吗?
是──→前往《5》
否──→前往《7》

《4》早上睡醒时,经常烦恼该先上厕所还是先刷牙吗?
是──→前往《6》
否──→前往《8》

《5》你胆敢在非常感伤的毕业典礼上疯狂地说笑话吗?
是──→前往《9》
否──→前往《10》

《6》别人说了一个很难笑的笑话,你胆敢不笑吗?
是──→前往《7》
否──→前往《10》

《7》你敢不惧他人讪骂,穿着海滩裤参加重要宴会吗?
是──→前往《11》
否──→前往《12》

《8》你讨厌的人要送你免冲水晶马桶,你会收下吗?
是──→前往《10》
否──→前往《9》

《9》你很想要和流浪狗玩「主人亲狗」的游戏吗?
是──→前往《11》
否──→前往《15》

《10》你叫了一碗牛肉面,老板却端来一盘鱼丸,你会吃下它吗?
是──→前往《13》
否──→前往《11》

《11》你敢用我发明的「马桶型冰温冷三段漱口机」吗?
是──→前往《16》
否──→前往《12》

《12》与你争辩中的朋友给你一个蛋塔,要你住口,你肯答应吗?
是──→前往《15》
否──→前往《14》

《13》你很想念故事给动物园里的猴子听吗?
是──→前往《14》
否──→前往《18》

《14》你会因为讨厌公司里的订书机,而辞去工作吗?
是──→前往《17》
否──→前往《15》

《15》监考老师在你的座位附近走来走去,你会瞪他吗?
是──→前往《18》
否──→前往《16》

《16》陌生人要请你吃好吃的火腿蛋炒饭,你会接受吗?
是──→前往《20》
否──→前往《19》

《17》你嚼口香糖时,都用牙齿中固定的一边嚼吗?
是──→《a》
否──→前往《19》

《18》吃蚕豆时,你会连壳带肉吞下吗?
是──→《c》
否──→《d》

《19》我说你是神经病,你会承认吗?
是──→《b》
否──→《a》

《20》我说你以後可能会变成神经病,你相信吗?
是──→《b》
否──→《d》

==========================================================================================================================================================================================================
【a】你是个不折不扣的神经病,即使你不承认也没有用,因为光凭你有这麽大的耐心做完这些题目就足以证明了。希望你好好地在工作上发挥你的耐心美德及铁齿性格,将来不排除有出人头地的可能。

【b】你是一群神经病中比较善良的那一个,但并不因此代表你的症状就比别人轻。反而你要担心的是,你是这一群神经病中,最有可能受到其他人的影响而使症状再加重的人。希望你没事少跟别人说话。

【c】你是一个性格豪迈的神经病,虽然现在的症状满严重的,不过请不要心灰意冷,只要多接触一些有趣的事物,你的精神状态将会因你的乐观性格而逐渐正常化。但是,要改掉参与危险活动的习惯。

【d】你是神经病中的神经病!简直病入膏肓了!更可怕的是,你虽然口口声声地说:“我绝不是神经病!”可是你的潜意识却告诉自己:“我是神经病中的王....”

57楼: {******************************************************************************}


{ }
{ Windows Base Services API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: winbase.h, released August 2001. The original Pascal }
{ code is: WinBase.pas, released December 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI home }
{ page, located at http://delphi-jedi.org or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}

unit JwaWinBase;

{$WEAKPACKAGEUNIT}

{$HPPEMIT ''''}
{$HPPEMIT ''#include "WinBase.h"''}
{$HPPEMIT ''''}

{$I WINDEFINES.INC}

{$STACKFRAMES ON}

interface

uses
{$IFDEF USE_DELPHI_TYPES}Windows,{$ENDIF}
JwaNtStatus, JwaWinNT, JwaWinType;

const
INVALID_HANDLE_VALUE = HANDLE(-1);
{$EXTERNALSYM INVALID_HANDLE_VALUE}
INVALID_FILE_SIZE = DWORD($FFFFFFFF);
{$EXTERNALSYM INVALID_FILE_SIZE}
INVALID_SET_FILE_POINTER = DWORD(-1);
{$EXTERNALSYM INVALID_SET_FILE_POINTER}
INVALID_FILE_ATTRIBUTES = DWORD(-1);
{$EXTERNALSYM INVALID_FILE_ATTRIBUTES}

FILE_BEGIN = 0;
{$EXTERNALSYM FILE_BEGIN}
FILE_CURRENT = 1;
{$EXTERNALSYM FILE_CURRENT}
FILE_END = 2;
{$EXTERNALSYM FILE_END}

TIME_ZONE_ID_INVALID = DWORD($FFFFFFFF);
{$EXTERNALSYM TIME_ZONE_ID_INVALID}

WAIT_FAILED = DWORD($FFFFFFFF);
{$EXTERNALSYM WAIT_FAILED}
WAIT_OBJECT_0 = STATUS_WAIT_0 + 0;
{$EXTERNALSYM WAIT_OBJECT_0}


WAIT_ABANDONED = STATUS_ABANDONED_WAIT_0 + 0;
{$EXTERNALSYM WAIT_ABANDONED}
WAIT_ABANDONED_0 = STATUS_ABANDONED_WAIT_0 + 0;
{$EXTERNALSYM WAIT_ABANDONED_0}

WAIT_IO_COMPLETION = STATUS_USER_APC;
{$EXTERNALSYM WAIT_IO_COMPLETION}
STILL_ACTIVE = STATUS_PENDING;
{$EXTERNALSYM STILL_ACTIVE}
EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION;
{$EXTERNALSYM EXCEPTION_ACCESS_VIOLATION}
EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT;
{$EXTERNALSYM EXCEPTION_DATATYPE_MISALIGNMENT}
EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT;
{$EXTERNALSYM EXCEPTION_BREAKPOINT}
EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP;
{$EXTERNALSYM EXCEPTION_SINGLE_STEP}
EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED;
{$EXTERNALSYM EXCEPTION_ARRAY_BOUNDS_EXCEEDED}
EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND;
{$EXTERNALSYM EXCEPTION_FLT_DENORMAL_OPERAND}
EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO;
{$EXTERNALSYM EXCEPTION_FLT_DIVIDE_BY_ZERO}
EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT;
{$EXTERNALSYM EXCEPTION_FLT_INEXACT_RESULT}
EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION;
{$EXTERNALSYM EXCEPTION_FLT_INVALID_OPERATION}
EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW;
{$EXTERNALSYM EXCEPTION_FLT_OVERFLOW}
EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK;
{$EXTERNALSYM EXCEPTION_FLT_STACK_CHECK}
EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW;
{$EXTERNALSYM EXCEPTION_FLT_UNDERFLOW}
EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO;
{$EXTERNALSYM EXCEPTION_INT_DIVIDE_BY_ZERO}
EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW;
{$EXTERNALSYM EXCEPTION_INT_OVERFLOW}
EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION;
{$EXTERNALSYM EXCEPTION_PRIV_INSTRUCTION}

EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR;
{$EXTERNALSYM EXCEPTION_IN_PAGE_ERROR}
EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION;
{$EXTERNALSYM EXCEPTION_ILLEGAL_INSTRUCTION}
EXCEPTION_NONCONTINUABLE_EXCEPTION = STATUS_NONCONTINUABLE_EXCEPTION;
{$EXTERNALSYM EXCEPTION_NONCONTINUABLE_EXCEPTION}
EXCEPTION_STACK_OVERFLOW = STATUS_STACK_OVERFLOW;
{$EXTERNALSYM EXCEPTION_STACK_OVERFLOW}
EXCEPTION_INVALID_DISPOSITION = STATUS_INVALID_DISPOSITION;
{$EXTERNALSYM EXCEPTION_INVALID_DISPOSITION}
EXCEPTION_GUARD_PAGE = STATUS_GUARD_PAGE_VIOLATION;
{$EXTERNALSYM EXCEPTION_GUARD_PAGE}
EXCEPTION_INVALID_HANDLE = STATUS_INVALID_HANDLE;
{$EXTERNALSYM EXCEPTION_INVALID_HANDLE}
CONTROL_C_EXIT = STATUS_CONTROL_C_EXIT;
{$EXTERNALSYM CONTROL_C_EXIT}

procedure MoveMemory(Destination, Source: PVOID; Length: SIZE_T);
{$EXTERNALSYM MoveMemory}
procedure CopyMemory(Destination, Source: PVOID; Length: SIZE_T);
{$EXTERNALSYM CopyMemory}
procedure FillMemory(Destination: PVOID; Length: SIZE_T; Fill: BYTE);
{$EXTERNALSYM FillMemory}
procedure ZeroMemory(Destination: PVOID; Length: SIZE_T);
{$EXTERNALSYM ZeroMemory}
//#define SecureZeroMemory RtlSecureZeroMemory TODO

//
// File creation flags must start at the high end since they
// are combined with the attributes
//

const
FILE_FLAG_WRITE_THROUGH = DWORD($80000000);
{$EXTERNALSYM FILE_FLAG_WRITE_THROUGH}
FILE_FLAG_OVERLAPPED = $40000000;
{$EXTERNALSYM FILE_FLAG_OVERLAPPED}
FILE_FLAG_NO_BUFFERING = $20000000;
{$EXTERNALSYM FILE_FLAG_NO_BUFFERING}
FILE_FLAG_RANDOM_ACCESS = $10000000;
{$EXTERNALSYM FILE_FLAG_RANDOM_ACCESS}
FILE_FLAG_SEQUENTIAL_SCAN = $08000000;
{$EXTERNALSYM FILE_FLAG_SEQUENTIAL_SCAN}
FILE_FLAG_DELETE_ON_CLOSE = $04000000;
{$EXTERNALSYM FILE_FLAG_DELETE_ON_CLOSE}
FILE_FLAG_BACKUP_SEMANTICS = $02000000;
{$EXTERNALSYM FILE_FLAG_BACKUP_SEMANTICS}
FILE_FLAG_POSIX_SEMANTICS = $01000000;
{$EXTERNALSYM FILE_FLAG_POSIX_SEMANTICS}
FILE_FLAG_OPEN_REPARSE_POINT = $00200000;
{$EXTERNALSYM FILE_FLAG_OPEN_REPARSE_POINT}
FILE_FLAG_OPEN_NO_RECALL = $00100000;
{$EXTERNALSYM FILE_FLAG_OPEN_NO_RECALL}
FILE_FLAG_FIRST_PIPE_INSTANCE = $00080000;
{$EXTERNALSYM FILE_FLAG_FIRST_PIPE_INSTANCE}

CREATE_NEW = 1;
{$EXTERNALSYM CREATE_NEW}
CREATE_ALWAYS = 2;
{$EXTERNALSYM CREATE_ALWAYS}
OPEN_EXISTING = 3;
{$EXTERNALSYM OPEN_EXISTING}
OPEN_ALWAYS = 4;
{$EXTERNALSYM OPEN_ALWAYS}
TRUNCATE_EXISTING = 5;
{$EXTERNALSYM TRUNCATE_EXISTING}

//
// Define possible return codes from the CopyFileEx callback routine
//

PROGRESS_CONTINUE = 0;
{$EXTERNALSYM PROGRESS_CONTINUE}
PROGRESS_CANCEL = 1;
{$EXTERNALSYM PROGRESS_CANCEL}
PROGRESS_STOP = 2;
{$EXTERNALSYM PROGRESS_STOP}
PROGRESS_QUIET = 3;
{$EXTERNALSYM PROGRESS_QUIET}

//
// Define CopyFileEx callback routine state change values
//

CALLBACK_CHUNK_FINISHED = $00000000;
{$EXTERNALSYM CALLBACK_CHUNK_FINISHED}
CALLBACK_STREAM_SWITCH = $00000001;
{$EXTERNALSYM CALLBACK_STREAM_SWITCH}

//
// Define CopyFileEx option flags
//

COPY_FILE_FAIL_IF_EXISTS = $00000001;
{$EXTERNALSYM COPY_FILE_FAIL_IF_EXISTS}
COPY_FILE_RESTARTABLE = $00000002;
{$EXTERNALSYM COPY_FILE_RESTARTABLE}
COPY_FILE_OPEN_SOURCE_FOR_WRITE = $00000004;
{$EXTERNALSYM COPY_FILE_OPEN_SOURCE_FOR_WRITE}
COPY_FILE_ALLOW_DECRYPTED_DESTINATION = $00000008;
{$EXTERNALSYM COPY_FILE_ALLOW_DECRYPTED_DESTINATION}

//
// Define ReplaceFile option flags
//

REPLACEFILE_WRITE_THROUGH = $00000001;
{$EXTERNALSYM REPLACEFILE_WRITE_THROUGH}
REPLACEFILE_IGNORE_MERGE_ERRORS = $00000002;
{$EXTERNALSYM REPLACEFILE_IGNORE_MERGE_ERRORS}

//
// Define the NamedPipe definitions
//


//
// Define the dwOpenMode values for CreateNamedPipe
//

PIPE_ACCESS_INBOUND = $00000001;
{$EXTERNALSYM PIPE_ACCESS_INBOUND}
PIPE_ACCESS_OUTBOUND = $00000002;
{$EXTERNALSYM PIPE_ACCESS_OUTBOUND}
PIPE_ACCESS_DUPLEX = $00000003;
{$EXTERNALSYM PIPE_ACCESS_DUPLEX}

//
// Define the Named Pipe End flags for GetNamedPipeInfo
//

PIPE_CLIENT_END = $00000000;
{$EXTERNALSYM PIPE_CLIENT_END}
PIPE_SERVER_END = $00000001;
{$EXTERNALSYM PIPE_SERVER_END}

//
// Define the dwPipeMode values for CreateNamedPipe
//

PIPE_WAIT = $00000000;
{$EXTERNALSYM PIPE_WAIT}
PIPE_NOWAIT = $00000001;
{$EXTERNALSYM PIPE_NOWAIT}
PIPE_READMODE_BYTE = $00000000;
{$EXTERNALSYM PIPE_READMODE_BYTE}
PIPE_READMODE_MESSAGE = $00000002;
{$EXTERNALSYM PIPE_READMODE_MESSAGE}
PIPE_TYPE_BYTE = $00000000;
{$EXTERNALSYM PIPE_TYPE_BYTE}
PIPE_TYPE_MESSAGE = $00000004;
{$EXTERNALSYM PIPE_TYPE_MESSAGE}

//
// Define the well known values for CreateNamedPipe nMaxInstances
//

PIPE_UNLIMITED_INSTANCES = 255;
{$EXTERNALSYM PIPE_UNLIMITED_INSTANCES}

//
// Define the Security Quality of Service bits to be passed
// into CreateFile
//

SECURITY_ANONYMOUS = (Ord(SecurityAnonymous) shl 16);
{$EXTERNALSYM SECURITY_ANONYMOUS}
SECURITY_IDENTIFICATION = (Ord(SecurityIdentification) shl 16);
{$EXTERNALSYM SECURITY_IDENTIFICATION}
SECURITY_IMPERSONATION = (Ord(SecurityImpersonation) shl 16);
{$EXTERNALSYM SECURITY_IMPERSONATION}
SECURITY_DELEGATION = (Ord(SecurityDelegation) shl 16);
{$EXTERNALSYM SECURITY_DELEGATION}

SECURITY_CONTEXT_TRACKING = $00040000;
{$EXTERNALSYM SECURITY_CONTEXT_TRACKING}
SECURITY_EFFECTIVE_ONLY = $00080000;
{$EXTERNALSYM SECURITY_EFFECTIVE_ONLY}

SECURITY_SQOS_PRESENT = $00100000;
{$EXTERNALSYM SECURITY_SQOS_PRESENT}
SECURITY_VALID_SQOS_FLAGS = $001F0000;
{$EXTERNALSYM SECURITY_VALID_SQOS_FLAGS}



//
// File structures
//

type
LPOVERLAPPED = ^OVERLAPPED;
{$EXTERNALSYM LPOVERLAPPED}
_OVERLAPPED = record
Internal: ULONG_PTR;
InternalHigh: ULONG_PTR;
Union: record
case Integer of
0: (
Offset: DWORD;
OffsetHigh: DWORD);
1: (
Pointer: PVOID);
end;
hEvent: HANDLE;
end;
{$EXTERNALSYM _OVERLAPPED}
OVERLAPPED = _OVERLAPPED;
{$EXTERNALSYM OVERLAPPED}
TOverlapped = OVERLAPPED;
POverlapped = LPOVERLAPPED;

PSECURITY_ATTRIBUTES = ^SECURITY_ATTRIBUTES;
{$EXTERNALSYM PSECURITY_ATTRIBUTES}
_SECURITY_ATTRIBUTES = record
nLength: DWORD;
lpSecurityDescriptor: LPVOID;
bInheritHandle: BOOL;
end;
{$EXTERNALSYM _SECURITY_ATTRIBUTES}
SECURITY_ATTRIBUTES = _SECURITY_ATTRIBUTES;
{$EXTERNALSYM SECURITY_ATTRIBUTES}
LPSECURITY_ATTRIBUTES = ^SECURITY_ATTRIBUTES;
{$EXTERNALSYM LPSECURITY_ATTRIBUTES}
TSecurityAttributes = SECURITY_ATTRIBUTES;

PSecurityAttributes = PSECURITY_ATTRIBUTES;

PPROCESS_INFORMATION = ^PROCESS_INFORMATION;
{$EXTERNALSYM PPROCESS_INFORMATION}
_PROCESS_INFORMATION = record
hProcess: HANDLE;
hThread: HANDLE;
dwProcessId: DWORD;
dwThreadId: DWORD;
end;
{$EXTERNALSYM _PROCESS_INFORMATION}
PROCESS_INFORMATION = _PROCESS_INFORMATION;
{$EXTERNALSYM PROCESS_INFORMATION}
LPPROCESS_INFORMATION = ^PROCESS_INFORMATION;
{$EXTERNALSYM LPPROCESS_INFORMATION}
TProcessInformation = PROCESS_INFORMATION;
PProcessInformation = PPROCESS_INFORMATION;

//
// File System time stamps are represented with the following structure:
//

{$IFNDEF _FILETIME_}
{$DEFINE _FILETIME_}
LPFILETIME = ^FILETIME;
{$EXTERNALSYM LPFILETIME}
_FILETIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
{$EXTERNALSYM _FILETIME}
FILETIME = _FILETIME;
{$EXTERNALSYM FILETIME}
TFileTime = FILETIME;

PFileTime = LPFILETIME;
{$ENDIF}

//
// System time is represented with the following structure:
//

LPSYSTEMTIME = ^SYSTEMTIME;
{$EXTERNALSYM LPSYSTEMTIME}
{$IFDEF USE_DELPHI_TYPES}
_SYSTEMTIME = Windows._SYSTEMTIME;
SYSTEMTIME = Windows.SYSTEMTIME;
TSystemTime = Windows.TSystemTime;
PSystemtime = Windows.PSystemTime;
{$ELSE}
_SYSTEMTIME = record
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end;
{$EXTERNALSYM _SYSTEMTIME}
SYSTEMTIME = _SYSTEMTIME;
{$EXTERNALSYM SYSTEMTIME}
TSystemTime = SYSTEMTIME;
PSystemTime = LPSYSTEMTIME;
{$ENDIF}

PTHREAD_START_ROUTINE = function (lpThreadParameter: LPVOID): DWORD; stdcall;
{$EXTERNALSYM PTHREAD_START_ROUTINE}
LPTHREAD_START_ROUTINE = PTHREAD_START_ROUTINE;
{$EXTERNALSYM LPTHREAD_START_ROUTINE}
TThreadStartRoutine = PTHREAD_START_ROUTINE;



PFIBER_START_ROUTINE = procedure (lpFiberParameter: LPVOID); stdcall;
{$EXTERNALSYM PFIBER_START_ROUTINE}
LPFIBER_START_ROUTINE = PFIBER_START_ROUTINE;
{$EXTERNALSYM LPFIBER_START_ROUTINE}
TFiberStartRoutine = PFIBER_START_ROUTINE;

CRITICAL_SECTION = RTL_CRITICAL_SECTION;
{$EXTERNALSYM CRITICAL_SECTION}
PCRITICAL_SECTION = PRTL_CRITICAL_SECTION;
{$EXTERNALSYM PCRITICAL_SECTION}
LPCRITICAL_SECTION = PRTL_CRITICAL_SECTION;
{$EXTERNALSYM LPCRITICAL_SECTION}
TCriticalSection = CRITICAL_SECTION;
PCriticalSection = PCRITICAL_SECTION;

CRITICAL_SECTION_DEBUG = RTL_CRITICAL_SECTION_DEBUG;
{$EXTERNALSYM CRITICAL_SECTION_DEBUG}
PCRITICAL_SECTION_DEBUG = PRTL_CRITICAL_SECTION_DEBUG;
{$EXTERNALSYM PCRITICAL_SECTION_DEBUG}
LPCRITICAL_SECTION_DEBUG = PRTL_CRITICAL_SECTION_DEBUG;
{$EXTERNALSYM LPCRITICAL_SECTION_DEBUG}
TCriticalSectionDebug = CRITICAL_SECTION_DEBUG;
PCriticalSectionDebug = PCRITICAL_SECTION_DEBUG;


LPLDT_ENTRY = PLDT_ENTRY;
{$EXTERNALSYM LPLDT_ENTRY}
PLdtEntry = LPLDT_ENTRY;

const
MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE;
{$EXTERNALSYM MUTEX_MODIFY_STATE}
MUTEX_ALL_ACCESS = MUTANT_ALL_ACCESS;
{$EXTERNALSYM MUTEX_ALL_ACCESS}

//
// Serial provider type.
//

SP_SERIALCOMM = DWORD($00000001);
{$EXTERNALSYM SP_SERIALCOMM}

//
// Provider SubTypes
//

PST_UNSPECIFIED = DWORD($00000000);
{$EXTERNALSYM PST_UNSPECIFIED}
PST_RS232 = DWORD($00000001);
{$EXTERNALSYM PST_RS232}
PST_PARALLELPORT = DWORD($00000002);
{$EXTERNALSYM PST_PARALLELPORT}
PST_RS422 = DWORD($00000003);
{$EXTERNALSYM PST_RS422}
PST_RS423 = DWORD($00000004);
{$EXTERNALSYM PST_RS423}
PST_RS449 = DWORD($00000005);
{$EXTERNALSYM PST_RS449}
PST_MODEM = DWORD($00000006);
{$EXTERNALSYM PST_MODEM}
PST_FAX = DWORD($00000021);
{$EXTERNALSYM PST_FAX}
PST_SCANNER = DWORD($00000022);
{$EXTERNALSYM PST_SCANNER}
PST_NETWORK_BRIDGE = DWORD($00000100);
{$EXTERNALSYM PST_NETWORK_BRIDGE}
PST_LAT = DWORD($00000101);
{$EXTERNALSYM PST_LAT}
PST_TCPIP_TELNET = DWORD($00000102);
{$EXTERNALSYM PST_TCPIP_TELNET}
PST_X25 = DWORD($00000103);
{$EXTERNALSYM PST_X25}

//
// Provider capabilities flags.
//

PCF_DTRDSR = DWORD($0001);
{$EXTERNALSYM PCF_DTRDSR}
PCF_RTSCTS = DWORD($0002);
{$EXTERNALSYM PCF_RTSCTS}
PCF_RLSD = DWORD($0004);
{$EXTERNALSYM PCF_RLSD}
PCF_PARITY_CHECK = DWORD($0008);
{$EXTERNALSYM PCF_PARITY_CHECK}
PCF_XONXOFF = DWORD($0010);
{$EXTERNALSYM PCF_XONXOFF}
PCF_SETXCHAR = DWORD($0020);
{$EXTERNALSYM PCF_SETXCHAR}
PCF_TOTALTIMEOUTS = DWORD($0040);
{$EXTERNALSYM PCF_TOTALTIMEOUTS}
PCF_INTTIMEOUTS = DWORD($0080);
{$EXTERNALSYM PCF_INTTIMEOUTS}
PCF_SPECIALCHARS = DWORD($0100);


{$EXTERNALSYM PCF_SPECIALCHARS}
PCF_16BITMODE = DWORD($0200);
{$EXTERNALSYM PCF_16BITMODE}

//
// Comm provider settable parameters.
//

SP_PARITY = DWORD($0001);
{$EXTERNALSYM SP_PARITY}
SP_BAUD = DWORD($0002);
{$EXTERNALSYM SP_BAUD}
SP_DATABITS = DWORD($0004);
{$EXTERNALSYM SP_DATABITS}
SP_STOPBITS = DWORD($0008);
{$EXTERNALSYM SP_STOPBITS}
SP_HANDSHAKING = DWORD($0010);
{$EXTERNALSYM SP_HANDSHAKING}
SP_PARITY_CHECK = DWORD($0020);
{$EXTERNALSYM SP_PARITY_CHECK}
SP_RLSD = DWORD($0040);
{$EXTERNALSYM SP_RLSD}

//
// Settable baud rates in the provider.
//

BAUD_075 = DWORD($00000001);
{$EXTERNALSYM BAUD_075}
BAUD_110 = DWORD($00000002);
{$EXTERNALSYM BAUD_110}
BAUD_134_5 = DWORD($00000004);
{$EXTERNALSYM BAUD_134_5}
BAUD_150 = DWORD($00000008);
{$EXTERNALSYM BAUD_150}
BAUD_300 = DWORD($00000010);
{$EXTERNALSYM BAUD_300}
BAUD_600 = DWORD($00000020);
{$EXTERNALSYM BAUD_600}
BAUD_1200 = DWORD($00000040);
{$EXTERNALSYM BAUD_1200}
BAUD_1800 = DWORD($00000080);
{$EXTERNALSYM BAUD_1800}
BAUD_2400 = DWORD($00000100);
{$EXTERNALSYM BAUD_2400}
BAUD_4800 = DWORD($00000200);
{$EXTERNALSYM BAUD_4800}
BAUD_7200 = DWORD($00000400);
{$EXTERNALSYM BAUD_7200}
BAUD_9600 = DWORD($00000800);
{$EXTERNALSYM BAUD_9600}
BAUD_14400 = DWORD($00001000);
{$EXTERNALSYM BAUD_14400}
BAUD_19200 = DWORD($00002000);
{$EXTERNALSYM BAUD_19200}
BAUD_38400 = DWORD($00004000);
{$EXTERNALSYM BAUD_38400}
BAUD_56K = DWORD($00008000);
{$EXTERNALSYM BAUD_56K}
BAUD_128K = DWORD($00010000);
{$EXTERNALSYM BAUD_128K}
BAUD_115200 = DWORD($00020000);
{$EXTERNALSYM BAUD_115200}
BAUD_57600 = DWORD($00040000);
{$EXTERNALSYM BAUD_57600}
BAUD_USER = DWORD($10000000);
{$EXTERNALSYM BAUD_USER}

//
// Settable Data Bits
//

DATABITS_5 = WORD($0001);
{$EXTERNALSYM DATABITS_5}
DATABITS_6 = WORD($0002);
{$EXTERNALSYM DATABITS_6}
DATABITS_7 = WORD($0004);
{$EXTERNALSYM DATABITS_7}
DATABITS_8 = WORD($0008);
{$EXTERNALSYM DATABITS_8}
DATABITS_16 = WORD($0010);
{$EXTERNALSYM DATABITS_16}
DATABITS_16X = WORD($0020);
{$EXTERNALSYM DATABITS_16X}

//
// Settable Stop and Parity bits.
//

STOPBITS_10 = WORD($0001);
{$EXTERNALSYM STOPBITS_10}
STOPBITS_15 = WORD($0002);
{$EXTERNALSYM STOPBITS_15}
STOPBITS_20 = WORD($0004);
{$EXTERNALSYM STOPBITS_20}
PARITY_NONE = WORD($0100);
{$EXTERNALSYM PARITY_NONE}
PARITY_ODD = WORD($0200);
{$EXTERNALSYM PARITY_ODD}
PARITY_EVEN = WORD($0400);
{$EXTERNALSYM PARITY_EVEN}
PARITY_MARK = WORD($0800);
{$EXTERNALSYM PARITY_MARK}
PARITY_SPACE = WORD($1000);
{$EXTERNALSYM PARITY_SPACE}

type
LPCOMMPROP = ^COMMPROP;
{$EXTERNALSYM LPCOMMPROP}
_COMMPROP = record
wPacketLength: Word;
wPacketVersion: Word;
dwServiceMask: DWORD;
dwReserved1: DWORD;
dwMaxTxQueue: DWORD;
dwMaxRxQueue: DWORD;
dwMaxBaud: DWORD;
dwProvSubType: DWORD;
dwProvCapabilities: DWORD;
dwSettableParams: DWORD;
dwSettableBaud: DWORD;
wSettableData: Word;
wSettableStopParity: Word;
dwCurrentTxQueue: DWORD;
dwCurrentRxQueue: DWORD;
dwProvSpec1: DWORD;
dwProvSpec2: DWORD;
wcProvChar: array [0..0] of WCHAR;
end;
{$EXTERNALSYM _COMMPROP}
COMMPROP = _COMMPROP;
{$EXTERNALSYM COMMPROP}
TCommProp = COMMPROP;
PCommProp = LPCOMMPROP;

//
// Set dwProvSpec1 to COMMPROP_INITIALIZED to indicate that wPacketLength
// is valid before a call to GetCommProperties().
//

const
COMMPROP_INITIALIZED = DWORD($E73CF52E);
{$EXTERNALSYM COMMPROP_INITIALIZED}

//_COMSTAT Flags (bitfield)

COMSTAT_CTS_HOLD = 1 shl 0;
COMSTAT_DSR_HOLD = 1 shl 1;
COMSTAT_RLSD_HOLD = 1 shl 2;
COMSTAT_XOFF_HOLD = 1 shl 3;
COMSTAT_XOFF_SENT = 1 shl 4;
COMSTAT_F_EOF = 1 shl 5;
COMSTAT_F_TXIM = 1 shl 6;

type
LPCOMSTAT = ^COMSTAT;
{$EXTERNALSYM LPCOMSTAT}
_COMSTAT = record
Flags: DWORD;
cbInQue: DWORD;
cbOutQue: DWORD;
end;
{$EXTERNALSYM _COMSTAT}
COMSTAT = _COMSTAT;
{$EXTERNALSYM COMSTAT}
TComstat = COMSTAT;
PComstat = LPCOMSTAT;

//
// DTR Control Flow Values.
//

const
DTR_CONTROL_DISABLE = $00;
{$EXTERNALSYM DTR_CONTROL_DISABLE}
DTR_CONTROL_ENABLE = $01;
{$EXTERNALSYM DTR_CONTROL_ENABLE}
DTR_CONTROL_HANDSHAKE = $02;
{$EXTERNALSYM DTR_CONTROL_HANDSHAKE}

//
// RTS Control Flow Values
//

RTS_CONTROL_DISABLE = $00;
{$EXTERNALSYM RTS_CONTROL_DISABLE}
RTS_CONTROL_ENABLE = $01;
{$EXTERNALSYM RTS_CONTROL_ENABLE}
RTS_CONTROL_HANDSHAKE = $02;

{$EXTERNALSYM RTS_CONTROL_HANDSHAKE}
RTS_CONTROL_TOGGLE = $03;
{$EXTERNALSYM RTS_CONTROL_TOGGLE}

// _DCB.Flags

const
fDcbBinary = 1 shl 0; // Binary Mode (skip EOF check)
fDcbParity = 1 shl 1; // Enable parity checking
fDcbOutxCtsFlow = 1 shl 2; // CTS handshaking on output
fDcbOutxDsrFlow = 1 shl 3; // DSR handshaking on output
fDcbDtrControl = $0030; // DTR Flow control
fDcbDsrSensitivity = 1 shl 6; // DSR Sensitivity
fDcbTXContinueOnXoff = 1 shl 7; // Continue TX when Xoff sent
fDcbOutX = 1 shl 8; // Enable output X-ON/X-OFF
fDcbInX = 1 shl 9; // Enable input X-ON/X-OFF
fDcbErrorChar = 1 shl 10; // Enable Err Replacement
fDcbNull = 1 shl 11; // Enable Null stripping
fDcbRtsControl = $3000; // Rts Flow control
fAbortOnError = 1 shl 14; // Abort all reads and writes on Error

type
LPDCB = ^DCB;
{$EXTERNALSYM LPDCB}


_DCB = record
DCBlength: DWORD; // sizeof(DCB)
BaudRate: DWORD; // Baudrate at which running
Flags: DWORD; // See constants above
wReserved: WORD; // Not currently used
XonLim: WORD; // Transmit X-ON threshold
XoffLim: WORD; // Transmit X-OFF threshold
ByteSize: BYTE; // Number of bits/byte, 4-8
Parity: BYTE; // 0-4=None,Odd,Even,Mark,Space
StopBits: BYTE; // 0,1,2 = 1, 1.5, 2
XonChar: Char; // Tx and Rx X-ON character
XoffChar: Char; // Tx and Rx X-OFF character
ErrorChar: Char; // Error replacement char
EofChar: Char; // End of Input character
EvtChar: Char; // Received Event character
wReserved1: WORD; // Fill for now.
end;
{$EXTERNALSYM _DCB}
DCB = _DCB;
{$EXTERNALSYM DCB}
TDCB = DCB;
PDCB = LPDCB;

LPCOMMTIMEOUTS = ^COMMTIMEOUTS;
{$EXTERNALSYM LPCOMMTIMEOUTS}
_COMMTIMEOUTS = record
ReadIntervalTimeout: DWORD; // Maximum time between read chars.
ReadTotalTimeoutMultiplier: DWORD; // Multiplier of characters.
ReadTotalTimeoutConstant: DWORD; // Constant in milliseconds.
WriteTotalTimeoutMultiplier: DWORD; // Multiplier of characters.
WriteTotalTimeoutConstant: DWORD; // Constant in milliseconds.
end;
{$EXTERNALSYM _COMMTIMEOUTS}
COMMTIMEOUTS = _COMMTIMEOUTS;
{$EXTERNALSYM COMMTIMEOUTS}
TCommTimeouts = COMMTIMEOUTS;
PCommTimeouts = LPCOMMTIMEOUTS;

LPCOMMCONFIG = ^COMMCONFIG;
{$EXTERNALSYM LPCOMMCONFIG}
_COMMCONFIG = record
dwSize: DWORD; // Size of the entire struct
wVersion: Word; // version of the structure
wReserved: Word; // alignment
dcb: DCB; // device control block
dwProviderSubType: DWORD; // ordinal value for identifying
// provider-defined data structure format
dwProviderOffset: DWORD; // Specifies the offset of provider specific
// data field in bytes from the start
dwProviderSize: DWORD; // size of the provider-specific data field
wcProviderData: array [0..0] of WCHAR; // provider-specific data
end;
{$EXTERNALSYM _COMMCONFIG}
COMMCONFIG = _COMMCONFIG;
{$EXTERNALSYM COMMCONFIG}
TCommConfig = COMMCONFIG;
PCommConfig = LPCOMMCONFIG;

LPSYSTEM_INFO = ^SYSTEM_INFO;
{$EXTERNALSYM LPSYSTEM_INFO}
_SYSTEM_INFO = record
case Integer of
0: (
dwOemId: DWORD); // absolete, do not use
1: (
wProcessorArchitecture: WORD;
wReserved: WORD;
dwPageSize: DWORD;
lpMinimumApplicationAddress: LPVOID;
lpMaximumApplicationAddress: LPVOID;
dwActiveProcessorMask: DWORD_PTR;
dwNumberOfProcessors: DWORD;
dwProcessorType: DWORD;
dwAllocationGranularity: DWORD;
wProcessorLevel: WORD;


wProcessorRevision: WORD);
end;
{$EXTERNALSYM _SYSTEM_INFO}
SYSTEM_INFO = _SYSTEM_INFO;
{$EXTERNALSYM SYSTEM_INFO}
TSystemInfo = SYSTEM_INFO;
PSystemInfo = LPSYSTEM_INFO;

//
//

function FreeModule(hLibModule: HMODULE): BOOL;
{$EXTERNALSYM FreeModule}
function MakeProcInstance(lpProc: FARPROC; hInstance: HINSTANCE): FARPROC;
{$EXTERNALSYM MakeProcInstance}
procedure FreeProcInstance(lpProc: FARPROC);
{$EXTERNALSYM FreeProcInstance}

// Global Memory Flags

const
GMEM_FIXED = $0000;
{$EXTERNALSYM GMEM_FIXED}
GMEM_MOVEABLE = $0002;
{$EXTERNALSYM GMEM_MOVEABLE}
GMEM_NOCOMPACT = $0010;
{$EXTERNALSYM GMEM_NOCOMPACT}
GMEM_NODISCARD = $0020;
{$EXTERNALSYM GMEM_NODISCARD}
GMEM_ZEROINIT = $0040;
{$EXTERNALSYM GMEM_ZEROINIT}
GMEM_MODIFY = $0080;
{$EXTERNALSYM GMEM_MODIFY}
GMEM_DISCARDABLE = $0100;
{$EXTERNALSYM GMEM_DISCARDABLE}
GMEM_NOT_BANKED = $1000;
{$EXTERNALSYM GMEM_NOT_BANKED}
GMEM_SHARE = $2000;
{$EXTERNALSYM GMEM_SHARE}
GMEM_DDESHARE = $2000;
{$EXTERNALSYM GMEM_DDESHARE}
GMEM_NOTIFY = $4000;
{$EXTERNALSYM GMEM_NOTIFY}
GMEM_LOWER = GMEM_NOT_BANKED;
{$EXTERNALSYM GMEM_LOWER}
GMEM_VALID_FLAGS = $7F72;
{$EXTERNALSYM GMEM_VALID_FLAGS}
GMEM_INVALID_HANDLE = $8000;
{$EXTERNALSYM GMEM_INVALID_HANDLE}

GHND = (GMEM_MOVEABLE or GMEM_ZEROINIT);
{$EXTERNALSYM GHND}
GPTR = (GMEM_FIXED or GMEM_ZEROINIT);
{$EXTERNALSYM GPTR}

function GlobalLRUNewest(h: HANDLE): HANDLE;
{$EXTERNALSYM GlobalLRUNewest}
function GlobalLRUOldest(h: HANDLE): HANDLE;
{$EXTERNALSYM GlobalLRUOldest}
function GlobalDiscard(h: HANDLE): HANDLE;
{$EXTERNALSYM GlobalDiscard}

// Flags returned by GlobalFlags (in addition to GMEM_DISCARDABLE)

const
GMEM_DISCARDED = $4000;
{$EXTERNALSYM GMEM_DISCARDED}
GMEM_LOCKCOUNT = $00FF;
{$EXTERNALSYM GMEM_LOCKCOUNT}

type
LPMEMORYSTATUS = ^MEMORYSTATUS;
{$EXTERNALSYM LPMEMORYSTATUS}
_MEMORYSTATUS = record
dwLength: DWORD;
dwMemoryLoad: DWORD;
dwTotalPhys: SIZE_T;
dwAvailPhys: SIZE_T;
dwTotalPageFile: SIZE_T;
dwAvailPageFile: SIZE_T;
dwTotalVirtual: SIZE_T;
dwAvailVirtual: SIZE_T;
end;
{$EXTERNALSYM _MEMORYSTATUS}
MEMORYSTATUS = _MEMORYSTATUS;
{$EXTERNALSYM MEMORYSTATUS}
TMemoryStatus = MEMORYSTATUS;
PMemoryStatus = LPMEMORYSTATUS;

// Local Memory Flags

const
LMEM_FIXED = $0000;
{$EXTERNALSYM LMEM_FIXED}
LMEM_MOVEABLE = $0002;
{$EXTERNALSYM LMEM_MOVEABLE}
LMEM_NOCOMPACT = $0010;
{$EXTERNALSYM LMEM_NOCOMPACT}
LMEM_NODISCARD = $0020;
{$EXTERNALSYM LMEM_NODISCARD}
LMEM_ZEROINIT = $0040;
{$EXTERNALSYM LMEM_ZEROINIT}
LMEM_MODIFY = $0080;
{$EXTERNALSYM LMEM_MODIFY}


LMEM_DISCARDABLE = $0F00;
{$EXTERNALSYM LMEM_DISCARDABLE}
LMEM_VALID_FLAGS = $0F72;
{$EXTERNALSYM LMEM_VALID_FLAGS}
LMEM_INVALID_HANDLE = $8000;
{$EXTERNALSYM LMEM_INVALID_HANDLE}

LHND = (LMEM_MOVEABLE or LMEM_ZEROINIT);
{$EXTERNALSYM LHND}
LPTR = (LMEM_FIXED or LMEM_ZEROINIT);
{$EXTERNALSYM LPTR}

NONZEROLHND = (LMEM_MOVEABLE);
{$EXTERNALSYM NONZEROLHND}
NONZEROLPTR = (LMEM_FIXED);
{$EXTERNALSYM NONZEROLPTR}

function LocalDiscard(h: HLOCAL): HLOCAL;
{$EXTERNALSYM LocalDiscard}

// Flags returned by LocalFlags (in addition to LMEM_DISCARDABLE)

const
LMEM_DISCARDED = $4000;
{$EXTERNALSYM LMEM_DISCARDED}
LMEM_LOCKCOUNT = $00FF;
{$EXTERNALSYM LMEM_LOCKCOUNT}

//
// dwCreationFlag values
//

DEBUG_PROCESS = $00000001;
{$EXTERNALSYM DEBUG_PROCESS}
DEBUG_ONLY_THIS_PROCESS = $00000002;
{$EXTERNALSYM DEBUG_ONLY_THIS_PROCESS}

CREATE_SUSPENDED = $00000004;


{$EXTERNALSYM CREATE_SUSPENDED}

DETACHED_PROCESS = $00000008;
{$EXTERNALSYM DETACHED_PROCESS}

CREATE_NEW_CONSOLE = $00000010;
{$EXTERNALSYM CREATE_NEW_CONSOLE}

NORMAL_PRIORITY_CLASS = $00000020;
{$EXTERNALSYM NORMAL_PRIORITY_CLASS}
IDLE_PRIORITY_CLASS = $00000040;
{$EXTERNALSYM IDLE_PRIORITY_CLASS}
HIGH_PRIORITY_CLASS = $00000080;
{$EXTERNALSYM HIGH_PRIORITY_CLASS}
REALTIME_PRIORITY_CLASS = $00000100;
{$EXTERNALSYM REALTIME_PRIORITY_CLASS}

CREATE_NEW_PROCESS_GROUP = $00000200;
{$EXTERNALSYM CREATE_NEW_PROCESS_GROUP}
CREATE_UNICODE_ENVIRONMENT = $00000400;
{$EXTERNALSYM CREATE_UNICODE_ENVIRONMENT}

CREATE_SEPARATE_WOW_VDM = $00000800;
{$EXTERNALSYM CREATE_SEPARATE_WOW_VDM}
CREATE_SHARED_WOW_VDM = $00001000;
{$EXTERNALSYM CREATE_SHARED_WOW_VDM}
CREATE_FORCEDOS = $00002000;
{$EXTERNALSYM CREATE_FORCEDOS}

BELOW_NORMAL_PRIORITY_CLASS = $00004000;
{$EXTERNALSYM BELOW_NORMAL_PRIORITY_CLASS}
ABOVE_NORMAL_PRIORITY_CLASS = $00008000;
{$EXTERNALSYM ABOVE_NORMAL_PRIORITY_CLASS}
STACK_SIZE_PARAM_IS_A_RESERVATION = $00010000;
{$EXTERNALSYM STACK_SIZE_PARAM_IS_A_RESERVATION}

CREATE_BREAKAWAY_FROM_JOB = $01000000;
{$EXTERNALSYM CREATE_BREAKAWAY_FROM_JOB}
CREATE_PRESERVE_CODE_AUTHZ_LEVEL = $02000000;
{$EXTERNALSYM CREATE_PRESERVE_CODE_AUTHZ_LEVEL}

CREATE_DEFAULT_ERROR_MODE = $04000000;
{$EXTERNALSYM CREATE_DEFAULT_ERROR_MODE}
CREATE_NO_WINDOW = $08000000;
{$EXTERNALSYM CREATE_NO_WINDOW}

PROFILE_USER = $10000000;
{$EXTERNALSYM PROFILE_USER}
PROFILE_KERNEL = $20000000;
{$EXTERNALSYM PROFILE_KERNEL}
PROFILE_SERVER = $40000000;
{$EXTERNALSYM PROFILE_SERVER}

CREATE_IGNORE_SYSTEM_DEFAULT = DWORD($80000000);
{$EXTERNALSYM CREATE_IGNORE_SYSTEM_DEFAULT}

THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN;
{$EXTERNALSYM THREAD_PRIORITY_LOWEST}
THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST+1);

{$EXTERNALSYM THREAD_PRIORITY_BELOW_NORMAL}
THREAD_PRIORITY_NORMAL = 0;
{$EXTERNALSYM THREAD_PRIORITY_NORMAL}
THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX;
{$EXTERNALSYM THREAD_PRIORITY_HIGHEST}
THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST-1);
{$EXTERNALSYM THREAD_PRIORITY_ABOVE_NORMAL}
THREAD_PRIORITY_ERROR_RETURN = (MAXLONG);
{$EXTERNALSYM THREAD_PRIORITY_ERROR_RETURN}

THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT;
{$EXTERNALSYM THREAD_PRIORITY_TIME_CRITICAL}
THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE;
{$EXTERNALSYM THREAD_PRIORITY_IDLE}

//
// Debug APIs
//

EXCEPTION_DEBUG_EVENT = 1;
{$EXTERNALSYM EXCEPTION_DEBUG_EVENT}
CREATE_THREAD_DEBUG_EVENT = 2;
{$EXTERNALSYM CREATE_THREAD_DEBUG_EVENT}
CREATE_PROCESS_DEBUG_EVENT = 3;
{$EXTERNALSYM CREATE_PROCESS_DEBUG_EVENT}
EXIT_THREAD_DEBUG_EVENT = 4;
{$EXTERNALSYM EXIT_THREAD_DEBUG_EVENT}
EXIT_PROCESS_DEBUG_EVENT = 5;
{$EXTERNALSYM EXIT_PROCESS_DEBUG_EVENT}
LOAD_DLL_DEBUG_EVENT = 6;
{$EXTERNALSYM LOAD_DLL_DEBUG_EVENT}
UNLOAD_DLL_DEBUG_EVENT = 7;
{$EXTERNALSYM UNLOAD_DLL_DEBUG_EVENT}
OUTPUT_DEBUG_STRING_EVENT = 8;
{$EXTERNALSYM OUTPUT_DEBUG_STRING_EVENT}
RIP_EVENT = 9;
{$EXTERNALSYM RIP_EVENT}

type
LPEXCEPTION_DEBUG_INFO = ^EXCEPTION_DEBUG_INFO;
{$EXTERNALSYM LPEXCEPTION_DEBUG_INFO}
_EXCEPTION_DEBUG_INFO = record
ExceptionRecord: EXCEPTION_RECORD;
dwFirstChance: DWORD;
end;
{$EXTERNALSYM _EXCEPTION_DEBUG_INFO}
EXCEPTION_DEBUG_INFO = _EXCEPTION_DEBUG_INFO;
{$EXTERNALSYM EXCEPTION_DEBUG_INFO}
TExceptionDebugInfo = EXCEPTION_DEBUG_INFO;
PExceptionDebugInfo = LPEXCEPTION_DEBUG_INFO;

LPCREATE_THREAD_DEBUG_INFO = ^CREATE_THREAD_DEBUG_INFO;
{$EXTERNALSYM LPCREATE_THREAD_DEBUG_INFO}
_CREATE_THREAD_DEBUG_INFO = record
hThread: HANDLE;
lpThreadLocalBase: LPVOID;
lpStartAddress: LPTHREAD_START_ROUTINE;
end;
{$EXTERNALSYM _CREATE_THREAD_DEBUG_INFO}
CREATE_THREAD_DEBUG_INFO = _CREATE_THREAD_DEBUG_INFO;
{$EXTERNALSYM CREATE_THREAD_DEBUG_INFO}
TCreateThreadDebugInfo = CREATE_THREAD_DEBUG_INFO;
PCreateThreadDebugInfo = LPCREATE_THREAD_DEBUG_INFO;

LPCREATE_PROCESS_DEBUG_INFO = ^CREATE_PROCESS_DEBUG_INFO;
{$EXTERNALSYM LPCREATE_PROCESS_DEBUG_INFO}
_CREATE_PROCESS_DEBUG_INFO = record
hFile: HANDLE;
hProcess: HANDLE;
hThread: HANDLE;
lpBaseOfImage: LPVOID;
dwDebugInfoFileOffset: DWORD;
nDebugInfoSize: DWORD;
lpThreadLocalBase: LPVOID;
lpStartAddress: LPTHREAD_START_ROUTINE;
lpImageName: LPVOID;
fUnicode: Word;
end;
{$EXTERNALSYM _CREATE_PROCESS_DEBUG_INFO}
CREATE_PROCESS_DEBUG_INFO = _CREATE_PROCESS_DEBUG_INFO;
{$EXTERNALSYM CREATE_PROCESS_DEBUG_INFO}
TCreateProcessDebugInfo = CREATE_PROCESS_DEBUG_INFO;
PCreateProcessDebugInfo = LPCREATE_PROCESS_DEBUG_INFO;

LPEXIT_THREAD_DEBUG_INFO = ^EXIT_THREAD_DEBUG_INFO;
{$EXTERNALSYM LPEXIT_THREAD_DEBUG_INFO}
_EXIT_THREAD_DEBUG_INFO = record
dwExitCode: DWORD;
end;
{$EXTERNALSYM _EXIT_THREAD_DEBUG_INFO}
EXIT_THREAD_DEBUG_INFO = _EXIT_THREAD_DEBUG_INFO;
{$EXTERNALSYM EXIT_THREAD_DEBUG_INFO}
TExitThreadDebugInfo = EXIT_THREAD_DEBUG_INFO;
PExitThreadDebugInfo = LPEXIT_THREAD_DEBUG_INFO;

LPEXIT_PROCESS_DEBUG_INFO = ^EXIT_PROCESS_DEBUG_INFO;
{$EXTERNALSYM LPEXIT_PROCESS_DEBUG_INFO}
_EXIT_PROCESS_DEBUG_INFO = record
dwExitCode: DWORD;
end;
{$EXTERNALSYM _EXIT_PROCESS_DEBUG_INFO}
EXIT_PROCESS_DEBUG_INFO = _EXIT_PROCESS_DEBUG_INFO;
{$EXTERNALSYM EXIT_PROCESS_DEBUG_INFO}
TExitProcessDebugInfo = EXIT_PROCESS_DEBUG_INFO;
PExitProcessDebugInfo = LPEXIT_PROCESS_DEBUG_INFO;

LPLOAD_DLL_DEBUG_INFO = ^LOAD_DLL_DEBUG_INFO;
{$EXTERNALSYM LPLOAD_DLL_DEBUG_INFO}
_LOAD_DLL_DEBUG_INFO = record
hFile: HANDLE;
lpBaseOfDll: LPVOID;
dwDebugInfoFileOffset: DWORD;
nDebugInfoSize: DWORD;
lpImageName: LPVOID;
fUnicode: Word;
end;
{$EXTERNALSYM _LOAD_DLL_DEBUG_INFO}
LOAD_DLL_DEBUG_INFO = _LOAD_DLL_DEBUG_INFO;
{$EXTERNALSYM LOAD_DLL_DEBUG_INFO}
TLoadDllDebugInfo = LOAD_DLL_DEBUG_INFO;
PLoadDllDebugInfo = LPLOAD_DLL_DEBUG_INFO;

LPUNLOAD_DLL_DEBUG_INFO = ^UNLOAD_DLL_DEBUG_INFO;
{$EXTERNALSYM LPUNLOAD_DLL_DEBUG_INFO}
_UNLOAD_DLL_DEBUG_INFO = record
lpBaseOfDll: LPVOID;
end;
{$EXTERNALSYM _UNLOAD_DLL_DEBUG_INFO}
UNLOAD_DLL_DEBUG_INFO = _UNLOAD_DLL_DEBUG_INFO;
{$EXTERNALSYM UNLOAD_DLL_DEBUG_INFO}
TUnloadDllDebugInfo = UNLOAD_DLL_DEBUG_INFO;
PUnloadDllDebugInfo = LPUNLOAD_DLL_DEBUG_INFO;

LPOUTPUT_DEBUG_STRING_INFO = ^OUTPUT_DEBUG_STRING_INFO;
{$EXTERNALSYM LPOUTPUT_DEBUG_STRING_INFO}
_OUTPUT_DEBUG_STRING_INFO = record
lpDebugStringData: LPSTR;


fUnicode: Word;
nDebugStringLength: Word;
end;
{$EXTERNALSYM _OUTPUT_DEBUG_STRING_INFO}
OUTPUT_DEBUG_STRING_INFO = _OUTPUT_DEBUG_STRING_INFO;
{$EXTERNALSYM OUTPUT_DEBUG_STRING_INFO}
TOutputDebugStringInfo = OUTPUT_DEBUG_STRING_INFO;
POutputDebugStringInfo = LPOUTPUT_DEBUG_STRING_INFO;

LPRIP_INFO = ^RIP_INFO;
{$EXTERNALSYM LPRIP_INFO}
_RIP_INFO = record
dwError: DWORD;
dwType: DWORD;
end;
{$EXTERNALSYM _RIP_INFO}
RIP_INFO = _RIP_INFO;
{$EXTERNALSYM RIP_INFO}
TRipInfo = RIP_INFO;
PRipInfo = LPRIP_INFO;

LPDEBUG_EVENT = ^DEBUG_EVENT;
{$EXTERNALSYM LPDEBUG_EVENT}
_DEBUG_EVENT = record
dwDebugEventCode: DWORD;
dwProcessId: DWORD;
dwThreadId: DWORD;
case Integer of
0: (Exception: EXCEPTION_DEBUG_INFO);
1: (CreateThread: CREATE_THREAD_DEBUG_INFO);
2: (CreateProcessInfo: CREATE_PROCESS_DEBUG_INFO);
3: (ExitThread: EXIT_THREAD_DEBUG_INFO);


4: (ExitProcess: EXIT_PROCESS_DEBUG_INFO);
5: (LoadDll: LOAD_DLL_DEBUG_INFO);
6: (UnloadDll: UNLOAD_DLL_DEBUG_INFO);
7: (DebugString: OUTPUT_DEBUG_STRING_INFO);
8: (RipInfo: RIP_INFO);
end;
{$EXTERNALSYM _DEBUG_EVENT}
DEBUG_EVENT = _DEBUG_EVENT;
{$EXTERNALSYM DEBUG_EVENT}
TDebugEvent = DEBUG_EVENT;
PDebugEvent = LPDEBUG_EVENT;

LPCONTEXT = PCONTEXT;
{$EXTERNALSYM LPCONTEXT}
LPEXCEPTION_RECORD = PEXCEPTION_RECORD;
{$EXTERNALSYM LPEXCEPTION_RECORD}
LPEXCEPTION_POINTERS = PEXCEPTION_POINTERS;
{$EXTERNALSYM LPEXCEPTION_POINTERS}

const
DRIVE_UNKNOWN = 0;
{$EXTERNALSYM DRIVE_UNKNOWN}
DRIVE_NO_ROOT_DIR = 1;
{$EXTERNALSYM DRIVE_NO_ROOT_DIR}
DRIVE_REMOVABLE = 2;
{$EXTERNALSYM DRIVE_REMOVABLE}
DRIVE_FIXED = 3;
{$EXTERNALSYM DRIVE_FIXED}
DRIVE_REMOTE = 4;
{$EXTERNALSYM DRIVE_REMOTE}
DRIVE_CDROM = 5;
{$EXTERNALSYM DRIVE_CDROM}
DRIVE_RAMDISK = 6;
{$EXTERNALSYM DRIVE_RAMDISK}

function GetFreeSpace(w: WORD): DWORD;
{$EXTERNALSYM GetFreeSpace}

const
FILE_TYPE_UNKNOWN = $0000;
{$EXTERNALSYM FILE_TYPE_UNKNOWN}
FILE_TYPE_DISK = $0001;
{$EXTERNALSYM FILE_TYPE_DISK}
FILE_TYPE_CHAR = $0002;
{$EXTERNALSYM FILE_TYPE_CHAR}
FILE_TYPE_PIPE = $0003;
{$EXTERNALSYM FILE_TYPE_PIPE}
FILE_TYPE_REMOTE = $8000;
{$EXTERNALSYM FILE_TYPE_REMOTE}

STD_INPUT_HANDLE = DWORD(-10);
{$EXTERNALSYM STD_INPUT_HANDLE}
STD_OUTPUT_HANDLE = DWORD(-11);
{$EXTERNALSYM STD_OUTPUT_HANDLE}
STD_ERROR_HANDLE = DWORD(-12);
{$EXTERNALSYM STD_ERROR_HANDLE}

NOPARITY = 0;
{$EXTERNALSYM NOPARITY}
ODDPARITY = 1;
{$EXTERNALSYM ODDPARITY}
EVENPARITY = 2;
{$EXTERNALSYM EVENPARITY}
MARKPARITY = 3;
{$EXTERNALSYM MARKPARITY}
SPACEPARITY = 4;
{$EXTERNALSYM SPACEPARITY}

ONESTOPBIT = 0;
{$EXTERNALSYM ONESTOPBIT}
ONE5STOPBITS = 1;
{$EXTERNALSYM ONE5STOPBITS}
TWOSTOPBITS = 2;
{$EXTERNALSYM TWOSTOPBITS}

IGNORE = 0; // Ignore signal
{$EXTERNALSYM IGNORE}
INFINITE = DWORD($FFFFFFFF); // Infinite timeout
{$EXTERNALSYM INFINITE}

//
// Baud rates at which the communication device operates
//

CBR_110 = 110;
{$EXTERNALSYM CBR_110}
CBR_300 = 300;
{$EXTERNALSYM CBR_300}
CBR_600 = 600;
{$EXTERNALSYM CBR_600}
CBR_1200 = 1200;
{$EXTERNALSYM CBR_1200}
CBR_2400 = 2400;
{$EXTERNALSYM CBR_2400}
CBR_4800 = 4800;
{$EXTERNALSYM CBR_4800}
CBR_9600 = 9600;
{$EXTERNALSYM CBR_9600}
CBR_14400 = 14400;
{$EXTERNALSYM CBR_14400}
CBR_19200 = 19200;
{$EXTERNALSYM CBR_19200}
CBR_38400 = 38400;
{$EXTERNALSYM CBR_38400}
CBR_56000 = 56000;
{$EXTERNALSYM CBR_56000}
CBR_57600 = 57600;
{$EXTERNALSYM CBR_57600}
CBR_115200 = 115200;
{$EXTERNALSYM CBR_115200}


CBR_128000 = 128000;
{$EXTERNALSYM CBR_128000}
CBR_256000 = 256000;
{$EXTERNALSYM CBR_256000}

//
// Error Flags
//

CE_RXOVER = $0001; // Receive Queue overflow
{$EXTERNALSYM CE_RXOVER}
CE_OVERRUN = $0002; // Receive Overrun Error
{$EXTERNALSYM CE_OVERRUN}
CE_RXPARITY = $0004; // Receive Parity Error
{$EXTERNALSYM CE_RXPARITY}
CE_FRAME = $0008; // Receive Framing error
{$EXTERNALSYM CE_FRAME}
CE_BREAK = $0010; // Break Detected
{$EXTERNALSYM CE_BREAK}
CE_TXFULL = $0100; // TX Queue is full
{$EXTERNALSYM CE_TXFULL}
CE_PTO = $0200; // LPTx Timeout
{$EXTERNALSYM CE_PTO}
CE_IOE = $0400; // LPTx I/O Error
{$EXTERNALSYM CE_IOE}
CE_DNS = $0800; // LPTx Device not selected
{$EXTERNALSYM CE_DNS}
CE_OOP = $1000; // LPTx Out-Of-Paper
{$EXTERNALSYM CE_OOP}
CE_MODE = $8000; // Requested mode unsupported
{$EXTERNALSYM CE_MODE}

IE_BADID = DWORD(-1); // Invalid or unsupported id
{$EXTERNALSYM IE_BADID}
IE_OPEN = DWORD(-2); // Device Already Open
{$EXTERNALSYM IE_OPEN}
IE_NOPEN = DWORD(-3); // Device Not Open
{$EXTERNALSYM IE_NOPEN}
IE_MEMORY = DWORD(-4); // Unable to allocate queues
{$EXTERNALSYM IE_MEMORY}
IE_DEFAULT = DWORD(-5); // Error in default parameters
{$EXTERNALSYM IE_DEFAULT}
IE_HARDWARE = DWORD(-10); // Hardware Not Present
{$EXTERNALSYM IE_HARDWARE}
IE_BYTESIZE = DWORD(-11); // Illegal Byte Size
{$EXTERNALSYM IE_BYTESIZE}
IE_BAUDRATE = DWORD(-12); // Unsupported BaudRate
{$EXTERNALSYM IE_BAUDRATE}

//
// Events
//

EV_RXCHAR = $0001; // Any Character received
{$EXTERNALSYM EV_RXCHAR}
EV_RXFLAG = $0002; // Received certain character
{$EXTERNALSYM EV_RXFLAG}
EV_TXEMPTY = $0004; // Transmitt Queue Empty
{$EXTERNALSYM EV_TXEMPTY}
EV_CTS = $0008; // CTS changed state
{$EXTERNALSYM EV_CTS}
EV_DSR = $0010; // DSR changed state


{$EXTERNALSYM EV_DSR}
EV_RLSD = $0020; // RLSD changed state
{$EXTERNALSYM EV_RLSD}
EV_BREAK = $0040; // BREAK received
{$EXTERNALSYM EV_BREAK}
EV_ERR = $0080; // Line status error occurred
{$EXTERNALSYM EV_ERR}
EV_RING = $0100; // Ring signal detected
{$EXTERNALSYM EV_RING}
EV_PERR = $0200; // Printer error occured
{$EXTERNALSYM EV_PERR}
EV_RX80FULL = $0400; // Receive buffer is 80 percent full
{$EXTERNALSYM EV_RX80FULL}
EV_EVENT1 = $0800; // Provider specific event 1
{$EXTERNALSYM EV_EVENT1}
EV_EVENT2 = $1000; // Provider specific event 2
{$EXTERNALSYM EV_EVENT2}

//
// Escape Functions
//

SETXOFF = 1; // Simulate XOFF received
{$EXTERNALSYM SETXOFF}
SETXON = 2; // Simulate XON received
{$EXTERNALSYM SETXON}
SETRTS = 3; // Set RTS high
{$EXTERNALSYM SETRTS}
CLRRTS = 4; // Set RTS low
{$EXTERNALSYM CLRRTS}
SETDTR = 5; // Set DTR high

{$EXTERNALSYM SETDTR}
CLRDTR = 6; // Set DTR low
{$EXTERNALSYM CLRDTR}
RESETDEV = 7; // Reset device if possible
{$EXTERNALSYM RESETDEV}
SETBREAK = 8; // Set the device break line.
{$EXTERNALSYM SETBREAK}
CLRBREAK = 9; // Clear the device break line.
{$EXTERNALSYM CLRBREAK}

//
// PURGE function flags.
//

PURGE_TXABORT = $0001; // Kill the pending/current writes to the comm port.
{$EXTERNALSYM PURGE_TXABORT}
PURGE_RXABORT = $0002; // Kill the pending/current reads to the comm port.
{$EXTERNALSYM PURGE_RXABORT}
PURGE_TXCLEAR = $0004; // Kill the transmit queue if there.
{$EXTERNALSYM PURGE_TXCLEAR}
PURGE_RXCLEAR = $0008; // Kill the typeahead buffer if there.
{$EXTERNALSYM PURGE_RXCLEAR}

LPTx = $80; // Set if ID is for LPT device
{$EXTERNALSYM LPTx}

//
// Modem Status Flags
//

MS_CTS_ON = DWORD($0010);
{$EXTERNALSYM MS_CTS_ON}
MS_DSR_ON = DWORD($0020);
{$EXTERNALSYM MS_DSR_ON}
MS_RING_ON = DWORD($0040);
{$EXTERNALSYM MS_RING_ON}
MS_RLSD_ON = DWORD($0080);
{$EXTERNALSYM MS_RLSD_ON}

//
// WaitSoundState() Constants
//

S_QUEUEEMPTY = 0;
{$EXTERNALSYM S_QUEUEEMPTY}
S_THRESHOLD = 1;
{$EXTERNALSYM S_THRESHOLD}
S_ALLTHRESHOLD = 2;
{$EXTERNALSYM S_ALLTHRESHOLD}

//
// Accent Modes
//

S_NORMAL = 0;
{$EXTERNALSYM S_NORMAL}
S_LEGATO = 1;
{$EXTERNALSYM S_LEGATO}
S_STACCATO = 2;
{$EXTERNALSYM S_STACCATO}

//
// SetSoundNoise() Sources
//

S_PERIOD512 = 0; // Freq = N/512 high pitch, less coarse hiss
{$EXTERNALSYM S_PERIOD512}
S_PERIOD1024 = 1; // Freq = N/1024
{$EXTERNALSYM S_PERIOD1024}
S_PERIOD2048 = 2; // Freq = N/2048 low pitch, more coarse hiss
{$EXTERNALSYM S_PERIOD2048}
S_PERIODVOICE = 3; // Source is frequency from voice channel (3)
{$EXTERNALSYM S_PERIODVOICE}
S_WHITE512 = 4; // Freq = N/512 high pitch, less coarse hiss
{$EXTERNALSYM S_WHITE512}
S_WHITE1024 = 5; // Freq = N/1024
{$EXTERNALSYM S_WHITE1024}
S_WHITE2048 = 6; // Freq = N/2048 low pitch, more coarse hiss
{$EXTERNALSYM S_WHITE2048}
S_WHITEVOICE = 7; // Source is frequency from voice channel (3)
{$EXTERNALSYM S_WHITEVOICE}

S_SERDVNA = DWORD(-1); // Device not available
{$EXTERNALSYM S_SERDVNA}
S_SEROFM = DWORD(-2); // Out of memory
{$EXTERNALSYM S_SEROFM}
S_SERMACT = DWORD(-3); // Music active
{$EXTERNALSYM S_SERMACT}
S_SERQFUL = DWORD(-4); // Queue full
{$EXTERNALSYM S_SERQFUL}
S_SERBDNT = DWORD(-5); // Invalid note
{$EXTERNALSYM S_SERBDNT}
S_SERDLN = DWORD(-6); // Invalid note length
{$EXTERNALSYM S_SERDLN}
S_SERDCC = DWORD(-7); // Invalid note count
{$EXTERNALSYM S_SERDCC}
S_SERDTP = DWORD(-8); // Invalid tempo
{$EXTERNALSYM S_SERDTP}
S_SERDVL = DWORD(-9); // Invalid volume
{$EXTERNALSYM S_SERDVL}
S_SERDMD = DWORD(-10); // Invalid mode
{$EXTERNALSYM S_SERDMD}
S_SERDSH = DWORD(-11); // Invalid shape
{$EXTERNALSYM S_SERDSH}
S_SERDPT = DWORD(-12); // Invalid pitch
{$EXTERNALSYM S_SERDPT}
S_SERDFQ = DWORD(-13); // Invalid frequency
{$EXTERNALSYM S_SERDFQ}
S_SERDDR = DWORD(-14); // Invalid duration
{$EXTERNALSYM S_SERDDR}
S_SERDSR = DWORD(-15); // Invalid source
{$EXTERNALSYM S_SERDSR}
S_SERDST = DWORD(-16); // Invalid state
{$EXTERNALSYM S_SERDST}

NMPWAIT_WAIT_FOREVER = DWORD($ffffffff);
{$EXTERNALSYM NMPWAIT_WAIT_FOREVER}
NMPWAIT_NOWAIT = $00000001;
{$EXTERNALSYM NMPWAIT_NOWAIT}
NMPWAIT_USE_DEFAULT_WAIT = $00000000;
{$EXTERNALSYM NMPWAIT_USE_DEFAULT_WAIT}

FS_CASE_IS_PRESERVED = FILE_CASE_PRESERVED_NAMES;
{$EXTERNALSYM FS_CASE_IS_PRESERVED}
FS_CASE_SENSITIVE = FILE_CASE_SENSITIVE_SEARCH;
{$EXTERNALSYM FS_CASE_SENSITIVE}
FS_UNICODE_STORED_ON_DISK = FILE_UNICODE_ON_DISK;
{$EXTERNALSYM FS_UNICODE_STORED_ON_DISK}
FS_PERSISTENT_ACLS = FILE_PERSISTENT_ACLS;
{$EXTERNALSYM FS_PERSISTENT_ACLS}
FS_VOL_IS_COMPRESSED = FILE_VOLUME_IS_COMPRESSED;
{$EXTERNALSYM FS_VOL_IS_COMPRESSED}
FS_FILE_COMPRESSION = FILE_FILE_COMPRESSION;
{$EXTERNALSYM FS_FILE_COMPRESSION}
FS_FILE_ENCRYPTION = FILE_SUPPORTS_ENCRYPTION;
{$EXTERNALSYM FS_FILE_ENCRYPTION}

FILE_MAP_COPY = SECTION_QUERY;
{$EXTERNALSYM FILE_MAP_COPY}
FILE_MAP_WRITE = SECTION_MAP_WRITE;
{$EXTERNALSYM FILE_MAP_WRITE}
FILE_MAP_READ = SECTION_MAP_READ;
{$EXTERNALSYM FILE_MAP_READ}
FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS;
{$EXTERNALSYM FILE_MAP_ALL_ACCESS}

OF_READ = $00000000;
{$EXTERNALSYM OF_READ}
OF_WRITE = $00000001;
{$EXTERNALSYM OF_WRITE}
OF_READWRITE = $00000002;
{$EXTERNALSYM OF_READWRITE}
OF_SHARE_COMPAT = $00000000;
{$EXTERNALSYM OF_SHARE_COMPAT}
OF_SHARE_EXCLUSIVE = $00000010;
{$EXTERNALSYM OF_SHARE_EXCLUSIVE}
OF_SHARE_DENY_WRITE = $00000020;
{$EXTERNALSYM OF_SHARE_DENY_WRITE}
OF_SHARE_DENY_READ = $00000030;
{$EXTERNALSYM OF_SHARE_DENY_READ}
OF_SHARE_DENY_NONE = $00000040;
{$EXTERNALSYM OF_SHARE_DENY_NONE}
OF_PARSE = $00000100;
{$EXTERNALSYM OF_PARSE}
OF_DELETE = $00000200;
{$EXTERNALSYM OF_DELETE}
OF_VERIFY = $00000400;
{$EXTERNALSYM OF_VERIFY}
OF_CANCEL = $00000800;
{$EXTERNALSYM OF_CANCEL}
OF_CREATE = $00001000;
{$EXTERNALSYM OF_CREATE}
OF_PROMPT = $00002000;
{$EXTERNALSYM OF_PROMPT}
OF_EXIST = $00004000;
{$EXTERNALSYM OF_EXIST}
OF_REOPEN = $00008000;
{$EXTERNALSYM OF_REOPEN}

OFS_MAXPATHNAME = 128;
{$EXTERNALSYM OFS_MAXPATHNAME}

type
LPOFSTRUCT = ^OFSTRUCT;
{$EXTERNALSYM LPOFSTRUCT}
_OFSTRUCT = record
cBytes: Byte;
fFixedDisk: Byte;
nErrCode: Word;
Reserved1: Word;
Reserved2: Word;
szPathName: array [0..OFS_MAXPATHNAME - 1] of CHAR;
end;
{$EXTERNALSYM _OFSTRUCT}
OFSTRUCT = _OFSTRUCT;
{$EXTERNALSYM OFSTRUCT}
TOfStruct = OFSTRUCT;
POfStruct = LPOFSTRUCT;

//
// The Risc compilers support intrinsic functions for interlocked
// increment, decrement, and exchange.
//

function InterlockedIncrement(var lpAddend: LONG): LONG; stdcall;
{$EXTERNALSYM InterlockedIncrement}

function InterlockedDecrement(var lpAddend: LONG): LONG; stdcall;
{$EXTERNALSYM InterlockedDecrement}

function InterlockedExchange(var Target: LONG; Value: LONG): LONG; stdcall;
{$EXTERNALSYM InterlockedExchange}

function InterlockedExchangePointer(var Target: PVOID; Value: PVOID): PVOID;
{$EXTERNALSYM InterlockedExchangePointer}

function InterlockedExchangeAdd(var Addend: LONG; Value: LONG): LONG; stdcall;
{$EXTERNALSYM InterlockedExchangeAdd}

function InterlockedCompareExchange(var Destination: LONG; Exchange: LONG;

Comperand: LONG): LONG; stdcall;
{$EXTERNALSYM InterlockedCompareExchange}

function InterlockedCompareExchangePointer(var Destination: PVOID;
Exchange, Comperand: PVOID): PVOID;
{$EXTERNALSYM InterlockedCompareExchangePointer}

procedure InitializeSListHead(ListHead: PSLIST_HEADER); stdcall;
{$EXTERNALSYM InitializeSListHead}

function InterlockedPopEntrySList(ListHead: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
{$EXTERNALSYM InterlockedPopEntrySList}

function InterlockedPushEntrySList(ListHead: PSLIST_HEADER; ListEntry: PSLIST_ENTRY): PSLIST_ENTRY; stdcall;
{$EXTERNALSYM InterlockedPushEntrySList}

function InterlockedFlushSList(ListHead: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
{$EXTERNALSYM InterlockedFlushSList}

function QueryDepthSList(ListHead: PSLIST_HEADER): USHORT; stdcall;
{$EXTERNALSYM QueryDepthSList}

function FreeResource(hResData: HGLOBAL): BOOL; stdcall;
{$EXTERNALSYM FreeResource}

function LockResource(hResData: HGLOBAL): LPVOID; stdcall;
{$EXTERNALSYM LockResource}

function UnlockResource(hResData: HANDLE): BOOL;
{$EXTERNALSYM UnlockResource}

const
MAXINTATOM = $C000;
{$EXTERNALSYM MAXINTATOM}
INVALID_ATOM = ATOM(0);
{$EXTERNALSYM INVALID_ATOM}

type
MAKEINTATOMA = PAnsiChar;
MAKEINTATOMW = PWideChar;
{$IFDEF UNICODE}
MAKEINTATOM = MAKEINTATOMW;
{$EXTERNALSYM MAKEINTATOM}
{$ELSE}
MAKEINTATOM = MAKEINTATOMA;
{$EXTERNALSYM MAKEINTATOM}
{$ENDIF}

function FreeLibrary(hLibModule: HMODULE): BOOL; stdcall;
{$EXTERNALSYM FreeLibrary}

procedure FreeLibraryAndExitThread(hLibModule: HMODULE; dwExitCode: DWORD); stdcall;
{$EXTERNALSYM FreeLibraryAndExitThread}

function DisableThreadLibraryCalls(hLibModule: HMODULE): BOOL; stdcall;
{$EXTERNALSYM DisableThreadLibraryCalls}

function GetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; stdcall;
{$EXTERNALSYM GetProcAddress}

function GetVersion: DWORD; stdcall;
{$EXTERNALSYM GetVersion)}


function GlobalAlloc(uFlags: UINT; dwBytes: SIZE_T): HGLOBAL; stdcall;
{$EXTERNALSYM GlobalAlloc}

function GlobalReAlloc(hMem: HGLOBAL; dwBytes: SIZE_T; uFlags: UINT): HGLOBAL; stdcall;
{$EXTERNALSYM GlobalReAlloc}

function GlobalSize(hMem: HGLOBAL): SIZE_T; stdcall;
{$EXTERNALSYM GlobalSize}

function GlobalFlags(hMem: HGLOBAL): UINT; stdcall;
{$EXTERNALSYM GlobalFlags}

function GlobalLock(hMem: HGLOBAL): LPVOID; stdcall;
{$EXTERNALSYM GlobalLock}

//!!!MWH My version win31 = DWORD WINAPI GlobalHandle(UINT)

function GlobalHandle(pMem: LPCVOID): HGLOBAL; stdcall;
{$EXTERNALSYM GlobalHandle}

function GlobalUnlock(hMem: HGLOBAL): BOOL; stdcall;
{$EXTERNALSYM GlobalUnlock}

function GlobalFree(hMem: HGLOBAL): HGLOBAL; stdcall;
{$EXTERNALSYM GlobalFree}

function GlobalCompact(dwMinFree: DWORD): SIZE_T; stdcall;
{$EXTERNALSYM GlobalCompact}

procedure GlobalFix(hMem: HGLOBAL); stdcall;
{$EXTERNALSYM GlobalFix}

procedure GlobalUnfix(hMem: HGLOBAL); stdcall;
{$EXTERNALSYM GlobalUnfix}

function GlobalWire(hMem: HGLOBAL): LPVOID; stdcall;
{$EXTERNALSYM GlobalWire}

function GlobalUnWire(hMem: HGLOBAL): BOOL; stdcall;
{$EXTERNALSYM GlobalUnWire}

procedure GlobalMemoryStatus(var lpBuffer: MEMORYSTATUS); stdcall;
{$EXTERNALSYM GlobalMemoryStatus}

type
LPMEMORYSTATUSEX = ^MEMORYSTATUSEX;
{$EXTERNALSYM LPMEMORYSTATUSEX}
_MEMORYSTATUSEX = record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: DWORDLONG;
ullAvailPhys: DWORDLONG;
ullTotalPageFile: DWORDLONG;
ullAvailPageFile: DWORDLONG;
ullTotalVirtual: DWORDLONG;
ullAvailVirtual: DWORDLONG;
ullAvailExtendedVirtual: DWORDLONG;
end;
{$EXTERNALSYM _MEMORYSTATUSEX}
MEMORYSTATUSEX = _MEMORYSTATUSEX;
{$EXTERNALSYM MEMORYSTATUSEX}
TMemoryStatusEx = MEMORYSTATUSEX;
PMemoryStatusEx = LPMEMORYSTATUSEX;

function GlobalMemoryStatusEx(var lpBuffer: MEMORYSTATUSEX): BOOL; stdcall;
{$EXTERNALSYM GlobalMemoryStatusEx}

function LocalAlloc(uFlags: UINT; uBytes: SIZE_T): HLOCAL; stdcall;
{$EXTERNALSYM LocalAlloc}

function LocalReAlloc(hMem: HLOCAL; uBytes: SIZE_T; uFlags: UINT): HLOCAL; stdcall;
{$EXTERNALSYM LocalReAlloc}

function LocalLock(hMem: HLOCAL): LPVOID; stdcall;
{$EXTERNALSYM LocalLock}

function LocalHandle(pMem: LPCVOID): HLOCAL; stdcall;
{$EXTERNALSYM LocalHandle}

function LocalUnlock(hMem: HLOCAL): BOOL; stdcall;
{$EXTERNALSYM LocalUnlock}

function LocalSize(hMem: HLOCAL): SIZE_T; stdcall;
{$EXTERNALSYM LocalSize}

function LocalFlags(hMem: HLOCAL): UINT; stdcall;
{$EXTERNALSYM LocalFlags}

function LocalFree(hMem: HLOCAL): HLOCAL; stdcall;
{$EXTERNALSYM LocalFree}

function LocalShrink(hMem: HLOCAL; cbNewSize: UINT): SIZE_T; stdcall;
{$EXTERNALSYM LocalShrink}

function LocalCompact(uMinFree: UINT): SIZE_T; stdcall;
{$EXTERNALSYM LocalCompact}

function FlushInstructionCache(hProcess: HANDLE; lpBaseAddress: LPCVOID;
dwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM FlushInstructionCache}

function VirtualAlloc(lpAddress: LPVOID; dwSize: SIZE_T; flAllocationType: DWORD;
flProtect: DWORD): LPVOID; stdcall;
{$EXTERNALSYM VirtualAlloc}

function VirtualFree(lpAddress: LPVOID; dwSize: SIZE_T; dwFreeType: DWORD): BOOL; stdcall;
{$EXTERNALSYM VirtualFree}

function VirtualProtect(lpAddress: LPVOID; dwSize: SIZE_T; flNewProtect: DWORD;
lpflOldProtect: PDWORD): BOOL; stdcall;
{$EXTERNALSYM VirtualProtect}

function VirtualQuery(lpAddress: LPCVOID; var lpBuffer: MEMORY_BASIC_INFORMATION;
dwLength: DWORD): DWORD; stdcall;
{$EXTERNALSYM VirtualQuery}

function VirtualAllocEx(hProcess: HANDLE; lpAddress: LPVOID; dwSize: SIZE_T;
flAllocationType: DWORD; flProtect: DWORD): LPVOID; stdcall;
{$EXTERNALSYM VirtualAllocEx}

function GetWriteWatch(dwFlags: DWORD; lpBaseAddress: PVOID;
dwRegionSize: SIZE_T; var lpAddresses: PVOID; var lpdwCount: ULONG_PTR;
var lpdwGranularity: ULONG): UINT; stdcall;


{$EXTERNALSYM GetWriteWatch}

function ResetWriteWatch(lpBaseAddress: LPVOID; dwRegionSize: SIZE_T): UINT; stdcall;
{$EXTERNALSYM ResetWriteWatch}

function GetLargePageMinimum: SIZE_T; stdcall;
{$EXTERNALSYM GetLargePageMinimum}

function VirtualFreeEx(hProcess: HANDLE; lpAddress: LPVOID; dwSize: SIZE_T;
dwFreeType: DWORD): BOOL; stdcall;
{$EXTERNALSYM VirtualFreeEx}

function VirtualProtectEx(hProcess: HANDLE; lpAddress: LPVOID; dwSize: SIZE_T;
flNewProtect: DWORD; lpflOldProtect: PDWORD): BOOL; stdcall;
{$EXTERNALSYM VirtualProtectEx}

function VirtualQueryEx(hProcess: HANDLE; lpAddress: LPCVOID;
var lpBuffer: MEMORY_BASIC_INFORMATION; dwLength: DWORD): DWORD; stdcall;
{$EXTERNALSYM VirtualQueryEx}

function HeapCreate(flOptions: DWORD; dwInitialSize: SIZE_T;
dwMaximumSize: SIZE_T): HANDLE; stdcall;
{$EXTERNALSYM HeapCreate}

function HeapDestroy(hHeap: HANDLE): BOOL; stdcall;
{$EXTERNALSYM HeapDestroy}

function HeapAlloc(hHeap: HANDLE; dwFlags: DWORD; dwBytes: SIZE_T): LPVOID; stdcall;

{$EXTERNALSYM HeapAlloc}

function HeapReAlloc(hHeap: HANDLE; dwFlags: DWORD; lpMem: LPVOID; dwBytes: SIZE_T): LPVOID; stdcall;
{$EXTERNALSYM HeapReAlloc}

function HeapFree(hHeap: HANDLE; dwFlags: DWORD; lpMem: LPVOID): BOOL; stdcall;
{$EXTERNALSYM HeapFree}

function HeapSize(hHeap: HANDLE; dwFlags: DWORD; lpMem: LPCVOID): SIZE_T; stdcall;
{$EXTERNALSYM HeapSize}

function HeapValidate(hHeap: HANDLE; dwFlags: DWORD; lpMem: LPCVOID): BOOL; stdcall;
{$EXTERNALSYM HeapValidate}

function HeapCompact(hHeap: HANDLE; dwFlags: DWORD): SIZE_T; stdcall;
{$EXTERNALSYM HeapCompact}

function GetProcessHeap: HANDLE; stdcall;
{$EXTERNALSYM GetProcessHeap)}

function GetProcessHeaps(NumberOfHeaps: DWORD; var ProcessHeaps: HANDLE): DWORD; stdcall;
{$EXTERNALSYM GetProcessHeaps}

type
PPROCESS_HEAP_ENTRY = ^PROCESS_HEAP_ENTRY;
{$EXTERNALSYM PPROCESS_HEAP_ENTRY}
_PROCESS_HEAP_ENTRY = record
lpData: PVOID;
cbData: DWORD;
cbOverhead: BYTE;

iRegionIndex: BYTE;
wFlags: WORD;
case Integer of
0: (
hMem: HANDLE;
dwReserved: array [0..2] of DWORD);
1: (
dwComittedSize: DWORD;
dwUnComittedSize: DWORD;
lpFirstBlock: LPVOID;
lpLastBlock: LPVOID);
end;
{$EXTERNALSYM _PROCESS_HEAP_ENTRY}
PROCESS_HEAP_ENTRY = _PROCESS_HEAP_ENTRY;
{$EXTERNALSYM PROCESS_HEAP_ENTRY}
LPPROCESS_HEAP_ENTRY = ^PROCESS_HEAP_ENTRY;
{$EXTERNALSYM LPPROCESS_HEAP_ENTRY}
TProcessHeapEntry = PROCESS_HEAP_ENTRY;
PProcessHeapEntry = PPROCESS_HEAP_ENTRY;

const
PROCESS_HEAP_REGION = $0001;
{$EXTERNALSYM PROCESS_HEAP_REGION}
PROCESS_HEAP_UNCOMMITTED_RANGE = $0002;
{$EXTERNALSYM PROCESS_HEAP_UNCOMMITTED_RANGE}
PROCESS_HEAP_ENTRY_BUSY = $0004;
{$EXTERNALSYM PROCESS_HEAP_ENTRY_BUSY}
PROCESS_HEAP_ENTRY_MOVEABLE = $0010;
{$EXTERNALSYM PROCESS_HEAP_ENTRY_MOVEABLE}
PROCESS_HEAP_ENTRY_DDESHARE = $0020;
{$EXTERNALSYM PROCESS_HEAP_ENTRY_DDESHARE}

function HeapLock(hHeap: HANDLE): BOOL; stdcall;
{$EXTERNALSYM HeapLock}

function HeapUnlock(hHeap: HANDLE): BOOL; stdcall;
{$EXTERNALSYM HeapUnlock}

function HeapWalk(hHeap: HANDLE; var lpEntry: PROCESS_HEAP_ENTRY): BOOL; stdcall;
{$EXTERNALSYM HeapWalk}

function HeapSetInformation(HeapHandle: HANDLE; HeapInformationClass: HEAP_INFORMATION_CLASS;
HeapInformation: PVOID; HeapInformationLength: SIZE_T): BOOL; stdcall;
{$EXTERNALSYM HeapSetInformation}

function HeapQueryInformation(HeapHandle: HANDLE; HeapInformationClass: HEAP_INFORMATION_CLASS;
HeapInformation: PVOID; HeapInformationLength: SIZE_T; ReturnLength: PSIZE_T): BOOL; stdcall;
{$EXTERNALSYM HeapQueryInformation}

// GetBinaryType return values.

const
SCS_32BIT_BINARY = 0;
{$EXTERNALSYM SCS_32BIT_BINARY}
SCS_DOS_BINARY = 1;
{$EXTERNALSYM SCS_DOS_BINARY}
SCS_WOW_BINARY = 2;
{$EXTERNALSYM SCS_WOW_BINARY}

SCS_PIF_BINARY = 3;
{$EXTERNALSYM SCS_PIF_BINARY}
SCS_POSIX_BINARY = 4;
{$EXTERNALSYM SCS_POSIX_BINARY}
SCS_OS216_BINARY = 5;
{$EXTERNALSYM SCS_OS216_BINARY}
SCS_64BIT_BINARY = 6;
{$EXTERNALSYM SCS_64BIT_BINARY}

SCS_THIS_PLATFORM_BINARY = SCS_32BIT_BINARY;
{$EXTERNALSYM SCS_THIS_PLATFORM_BINARY}

function GetBinaryTypeA(lpApplicationName: LPCSTR; var lpBinaryType: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetBinaryTypeA}
function GetBinaryTypeW(lpApplicationName: LPCWSTR; var lpBinaryType: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetBinaryTypeW}

{$IFDEF UNICODE}
function GetBinaryType(lpApplicationName: LPCWSTR; var lpBinaryType: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetBinaryType}
{$ELSE}
function GetBinaryType(lpApplicationName: LPCSTR; var lpBinaryType: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetBinaryType}
{$ENDIF}

function GetShortPathNameA(lpszLongPath: LPCSTR; lpszShortPath: LPSTR;
cchBuffer: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetShortPathNameA}
function GetShortPathNameW(lpszLongPath: LPCWSTR; lpszShortPath: LPWSTR;
cchBuffer: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetShortPathNameW}

{$IFDEF UNICODE}
function GetShortPathName(lpszLongPath: LPCWSTR; lpszShortPath: LPWSTR;
cchBuffer: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetShortPathName}
{$ELSE}
function GetShortPathName(lpszLongPath: LPCSTR; lpszShortPath: LPSTR;
cchBuffer: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetShortPathName}
{$ENDIF}

function GetLongPathNameA(lpszShortPath: LPCSTR; lpszLongPath: LPSTR;
cchBuffer: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetLongPathNameA}
function GetLongPathNameW(lpszShortPath: LPCWSTR; lpszLongPath: LPWSTR;
cchBuffer: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetLongPathNameW}

{$IFDEF UNICODE}
function GetLongPathName(lpszShortPath: LPCWSTR; lpszLongPath: LPWSTR;
cchBuffer: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetLongPathName}
{$ELSE}
function GetLongPathName(lpszShortPath: LPCSTR; lpszLongPath: LPSTR;
cchBuffer: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetLongPathName}
{$ENDIF}

function GetProcessAffinityMask(hProcess: HANDLE;
var lpProcessAffinityMask, lpSystemAffinityMask: DWORD_PTR): BOOL; stdcall;
{$EXTERNALSYM GetProcessAffinityMask}

function SetProcessAffinityMask(hProcess: HANDLE;
dwProcessAffinityMask: DWORD_PTR): BOOL; stdcall;
{$EXTERNALSYM SetProcessAffinityMask}

function GetProcessTimes(hProcess: HANDLE; var lpCreationTime, lpExitTime,
lpKernelTime, lpUserTime: FILETIME): BOOL; stdcall;
{$EXTERNALSYM GetProcessTimes}

function GetProcessIoCounters(hProcess: HANDLE; var lpIoCounters: IO_COUNTERS): BOOL; stdcall;
{$EXTERNALSYM GetProcessIoCounters}

function GetProcessWorkingSetSize(hProcess: HANDLE;
var lpMinimumWorkingSetSize, lpMaximumWorkingSetSize: SIZE_T): BOOL; stdcall;
{$EXTERNALSYM GetProcessWorkingSetSize}

function SetProcessWorkingSetSize(hProcess: HANDLE; dwMinimumWorkingSetSize,
dwMaximumWorkingSetSize: SIZE_T): BOOL; stdcall;
{$EXTERNALSYM SetProcessWorkingSetSize}

function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
dwProcessId: DWORD): HANDLE; stdcall;
{$EXTERNALSYM OpenProcess}

function GetCurrentProcess: HANDLE; stdcall;
{$EXTERNALSYM GetCurrentProcess}

function GetCurrentProcessId: DWORD; stdcall;
{$EXTERNALSYM GetCurrentProcessId}

procedure ExitProcess(uExitCode: UINT); stdcall;
{$EXTERNALSYM ExitProcess}

function TerminateProcess(hProcess: HANDLE; uExitCode: UINT): BOOL; stdcall;
{$EXTERNALSYM TerminateProcess}

function GetExitCodeProcess(hProcess: HANDLE; var lpExitCode: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetExitCodeProcess}

procedure FatalExit(ExitCode: Integer); stdcall;
{$EXTERNALSYM FatalExit}

{$IFNDEF UNICODE}
function GetEnvironmentStrings: LPSTR; stdcall;
{$EXTERNALSYM GetEnvironmentStrings}
{$ENDIF}

function GetEnvironmentStringsW: LPWSTR; stdcall;
{$EXTERNALSYM GetEnvironmentStringsW}

{$IFDEF UNICODE}


function GetEnvironmentStrings: LPWSTR; stdcall;
{$EXTERNALSYM GetEnvironmentStrings}
{$ELSE}
function GetEnvironmentStringsA: LPSTR; stdcall;
{$EXTERNALSYM GetEnvironmentStringsA}
{$ENDIF}

function FreeEnvironmentStringsA(pstr: LPSTR): BOOL; stdcall;
{$EXTERNALSYM FreeEnvironmentStringsA}
function FreeEnvironmentStringsW(pstr: LPWSTR): BOOL; stdcall;
{$EXTERNALSYM FreeEnvironmentStringsW}

{$IFDEF UNICODE}
function FreeEnvironmentStrings(pstr: LPWSTR): BOOL; stdcall;
{$EXTERNALSYM FreeEnvironmentStrings}
{$ELSE}
function FreeEnvironmentStrings(pstr: LPSTR): BOOL; stdcall;
{$EXTERNALSYM FreeEnvironmentStrings}
{$ENDIF}

procedure RaiseException(dwExceptionCode: DWORD; dwExceptionFlags: DWORD;
nNumberOfArguments: DWORD; lpArguments: PULONG_PTR); stdcall;
{$EXTERNALSYM RaiseException}

function UnhandledExceptionFilter(ExceptionInfo: PEXCEPTION_POINTERS): LONG; stdcall;
{$EXTERNALSYM UnhandledExceptionFilter}

type
PTOP_LEVEL_EXCEPTION_FILTER = function (ExceptionInfo: PEXCEPTION_POINTERS): LONG; stdcall;


{$EXTERNALSYM PTOP_LEVEL_EXCEPTION_FILTER}
LPTOP_LEVEL_EXCEPTION_FILTER = PTOP_LEVEL_EXCEPTION_FILTER;
{$EXTERNALSYM LPTOP_LEVEL_EXCEPTION_FILTER}
TTopLevelExceptionFilter = PTOP_LEVEL_EXCEPTION_FILTER;

function SetUnhandledExceptionFilter(lpTopLevelExceptionFilter: LPTOP_LEVEL_EXCEPTION_FILTER): LPTOP_LEVEL_EXCEPTION_FILTER; stdcall;
{$EXTERNALSYM SetUnhandledExceptionFilter}

//
// Fiber creation flags
//

const
FIBER_FLAG_FLOAT_SWITCH = $1; // context switch floating point
{$EXTERNALSYM FIBER_FLAG_FLOAT_SWITCH}

function CreateFiber(dwStackSize: DWORD; lpStartAddress: LPFIBER_START_ROUTINE;
lpParameter: LPVOID): LPVOID; stdcall;
{$EXTERNALSYM CreateFiber}

function CreateFiberEx(dwStackCommitSize, dwStackReserveSize: SIZE_T; dwFlags: DWORD;
lpStartAddress: LPFIBER_START_ROUTINE; lpParameter: LPVOID): LPVOID; stdcall;
{$EXTERNALSYM CreateFiberEx}

procedure DeleteFiber(lpFiber: LPVOID); stdcall;
{$EXTERNALSYM DeleteFiber}


function ConvertThreadToFiber(lpParameter: LPVOID): LPVOID; stdcall;
{$EXTERNALSYM ConvertThreadToFiber}

function ConvertThreadToFiberEx(lpParameter: LPVOID; dwFlags: DWORD): LPVOID; stdcall;
{$EXTERNALSYM ConvertThreadToFiberEx}

function ConvertFiberToThread: BOOL; stdcall;
{$EXTERNALSYM ConvertFiberToThread}

procedure SwitchToFiber(lpFiber: LPVOID); stdcall;
{$EXTERNALSYM SwitchToFiber}

function SwitchToThread: BOOL; stdcall;
{$EXTERNALSYM SwitchToThread}

function CreateThread(lpThreadAttributes: LPSECURITY_ATTRIBUTES;
dwStackSize: DWORD; lpStartAddress: LPTHREAD_START_ROUTINE; lpParameter: LPVOID;
dwCreationFlags: DWORD; lpThreadId: LPDWORD): HANDLE; stdcall;
{$EXTERNALSYM CreateThread}

function CreateRemoteThread(hProcess: HANDLE;
lpThreadAttributes: LPSECURITY_ATTRIBUTES; dwStackSize: DWORD;
lpStartAddress: LPTHREAD_START_ROUTINE; lpParameter: LPVOID;
dwCreationFlags: DWORD; lpThreadId: LPDWORD): HANDLE; stdcall;
{$EXTERNALSYM CreateRemoteThread}

function GetCurrentThread: HANDLE; stdcall;
{$EXTERNALSYM GetCurrentThread}

function GetCurrentThreadId: DWORD; stdcall;
{$EXTERNALSYM GetCurrentThreadId}

function GetProcessIdOfThread(Thread: HANDLE): DWORD; stdcall;
{$EXTERNALSYM GetProcessIdOfThread}

function GetThreadId(Thread: HANDLE): DWORD; stdcall;
{$EXTERNALSYM GetThreadId}

function GetProcessId(Process: HANDLE): DWORD; stdcall;
{$EXTERNALSYM GetProcessId}

function GetCurrentProcessorNumber: DWORD; stdcall;
{$EXTERNALSYM GetCurrentProcessorNumber}

function SetThreadAffinityMask(hThread: HANDLE;
dwThreadAffinityMask: DWORD_PTR): DWORD_PTR; stdcall;
{$EXTERNALSYM SetThreadAffinityMask}

function SetThreadIdealProcessor(hThread: HANDLE; dwIdealProcessor: DWORD): DWORD; stdcall;
{$EXTERNALSYM SetThreadIdealProcessor}

function SetProcessPriorityBoost(hProcess: HANDLE;
bDisablePriorityBoost: BOOL): BOOL; stdcall;
{$EXTERNALSYM SetProcessPriorityBoost}

function GetProcessPriorityBoost(hProcess: HANDLE;
var pDisablePriorityBoost: BOOL): BOOL; stdcall;
{$EXTERNALSYM GetProcessPriorityBoost}

function RequestWakeupLatency(latency: LATENCY_TIME): BOOL; stdcall;
{$EXTERNALSYM RequestWakeupLatency}

function IsSystemResumeAutomatic: BOOL; stdcall;
{$EXTERNALSYM IsSystemResumeAutomatic}

function OpenThread(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
dwThreadId: DWORD): HANDLE; stdcall;
{$EXTERNALSYM OpenThread}

function SetThreadPriority(hThread: HANDLE; nPriority: Integer): BOOL; stdcall;
{$EXTERNALSYM SetThreadPriority}

function SetThreadPriorityBoost(hThread: HANDLE; bDisablePriorityBoost: BOOL): BOOL; stdcall;
{$EXTERNALSYM SetThreadPriorityBoost}

function GetThreadPriorityBoost(hThread: HANDLE;
var pDisablePriorityBoost: BOOL): BOOL; stdcall;
{$EXTERNALSYM GetThreadPriorityBoost}

function GetThreadPriority(hThread: HANDLE): Integer; stdcall;
{$EXTERNALSYM GetThreadPriority}

function GetThreadTimes(hThread: HANDLE; var lpCreationTime, lpExitTime,


lpKernelTime, lpUserTime: FILETIME): BOOL; stdcall;
{$EXTERNALSYM GetThreadTimes}

procedure ExitThread(dwExitCode: DWORD); stdcall;
{$EXTERNALSYM ExitThread}

function TerminateThread(hThread: HANDLE; dwExitCode: DWORD): BOOL; stdcall;
{$EXTERNALSYM TerminateThread}

function GetExitCodeThread(hThread: HANDLE; var lpExitCode: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetExitCodeThread}

function GetThreadSelectorEntry(hThread: HANDLE; dwSelector: DWORD;
var lpSelectorEntry: LDT_ENTRY): BOOL; stdcall;
{$EXTERNALSYM GetThreadSelectorEntry}

function SetThreadExecutionState(esFlags: EXECUTION_STATE): EXECUTION_STATE; stdcall;
{$EXTERNALSYM SetThreadExecutionState}

function GetLastError: DWORD; stdcall;
{$EXTERNALSYM GetLastError}

procedure SetLastError(dwErrCode: DWORD); stdcall;
{$EXTERNALSYM SetLastError}

procedure RestoreLastError(dwErrCode: DWORD); stdcall;
{$EXTERNALSYM RestoreLastError}

type
PRESTORE_LAST_ERROR = procedure (dwErrCode: DWORD); stdcall;
{$EXTERNALSYM PRESTORE_LAST_ERROR}

const
RESTORE_LAST_ERROR_NAME_A = ''RestoreLastError'';
{$EXTERNALSYM RESTORE_LAST_ERROR_NAME_A}
RESTORE_LAST_ERROR_NAME_W = WideString(''RestoreLastError'');
{$EXTERNALSYM RESTORE_LAST_ERROR_NAME_W}
RESTORE_LAST_ERROR_NAME = __TEXT(''RestoreLastError'');
{$EXTERNALSYM RESTORE_LAST_ERROR_NAME}

function HasOverlappedIoCompleted(const lpOverlapped: OVERLAPPED): BOOL;
{$EXTERNALSYM HasOverlappedIoCompleted}

function GetOverlappedResult(hFile: HANDLE; const lpOverlapped: OVERLAPPED;
var lpNumberOfBytesTransferred: DWORD; bWait: BOOL): BOOL; stdcall;
{$EXTERNALSYM GetOverlappedResult}

function CreateIoCompletionPort(FileHandle: HANDLE; ExistingCompletionPort: HANDLE;
CompletionKey: ULONG_PTR; NumberOfConcurrentThreads: DWORD): HANDLE; stdcall;
{$EXTERNALSYM CreateIoCompletionPort}

function GetQueuedCompletionStatus(CompletionPort: HANDLE;
var lpNumberOfBytesTransferred: DWORD; var lpCompletionKey: ULONG_PTR;
var lpOverlapped: LPOVERLAPPED; dwMilliseconds: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetQueuedCompletionStatus}

function PostQueuedCompletionStatus(CompletionPort: HANDLE;
dwNumberOfBytesTransferred: DWORD; dwCompletionKey: ULONG_PTR;
lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM PostQueuedCompletionStatus}

const
SEM_FAILCRITICALERRORS = $0001;
{$EXTERNALSYM SEM_FAILCRITICALERRORS}
SEM_NOGPFAULTERRORBOX = $0002;
{$EXTERNALSYM SEM_NOGPFAULTERRORBOX}
SEM_NOALIGNMENTFAULTEXCEPT = $0004;
{$EXTERNALSYM SEM_NOALIGNMENTFAULTEXCEPT}
SEM_NOOPENFILEERRORBOX = $8000;
{$EXTERNALSYM SEM_NOOPENFILEERRORBOX}

function SetErrorMode(uMode: UINT): UINT; stdcall;
{$EXTERNALSYM SetErrorMode}

function ReadProcessMemory(hProcess: HANDLE; lpBaseAddress: LPCVOID;
lpBuffer: LPVOID; nSize: DWORD; lpNumberOfBytesRead: LPDWORD): BOOL; stdcall;
{$EXTERNALSYM ReadProcessMemory}

function WriteProcessMemory(hProcess: HANDLE; lpBaseAddress: LPVOID;
lpBuffer: LPVOID; nSize: DWORD; lpNumberOfBytesWritten: LPDWORD): BOOL; stdcall;
{$EXTERNALSYM WriteProcessMemory}

function GetThreadContext(hThread: HANDLE; var lpContext: CONTEXT): BOOL; stdcall;
{$EXTERNALSYM GetThreadContext}

function SetThreadContext(hThread: HANDLE; const lpContext: CONTEXT): BOOL; stdcall;
{$EXTERNALSYM SetThreadContext}

function SuspendThread(hThread: HANDLE): DWORD; stdcall;
{$EXTERNALSYM SuspendThread}

function ResumeThread(hThread: HANDLE): DWORD; stdcall;
{$EXTERNALSYM ResumeThread}

type
PAPCFUNC = procedure (dwParam: ULONG_PTR); stdcall;
{$EXTERNALSYM PAPCFUNC}
TApcFunc = PAPCFUNC;

function QueueUserAPC(pfnAPC: PAPCFUNC; hThread: HANDLE; dwData: ULONG_PTR): DWORD; stdcall;
{$EXTERNALSYM QueueUserAPC}

function IsDebuggerPresent: BOOL; stdcall;
{$EXTERNALSYM IsDebuggerPresent}

procedure DebugBreak; stdcall;
{$EXTERNALSYM DebugBreak}

function WaitForDebugEvent(var lpDebugEvent: DEBUG_EVENT; dwMilliseconds: DWORD): BOOL; stdcall;

{$EXTERNALSYM WaitForDebugEvent}

function ContinueDebugEvent(dwProcessId: DWORD; dwThreadId: DWORD;
dwContinueStatus: DWORD): BOOL; stdcall;
{$EXTERNALSYM ContinueDebugEvent}

function DebugActiveProcess(dwProcessId: DWORD): BOOL; stdcall;
{$EXTERNALSYM DebugActiveProcess}

function DebugActiveProcessStop(dwProcessId: DWORD): BOOL; stdcall;
{$EXTERNALSYM DebugActiveProcessStop}

function DebugSetProcessKillOnExit(KillOnExit: BOOL): BOOL; stdcall;
{$EXTERNALSYM DebugSetProcessKillOnExit}

function DebugBreakProcess(Process: HANDLE): BOOL; stdcall;
{$EXTERNALSYM DebugBreakProcess}

procedure InitializeCriticalSection(var lpCriticalSection: CRITICAL_SECTION); stdcall;
{$EXTERNALSYM InitializeCriticalSection}

procedure EnterCriticalSection(var lpCriticalSection: CRITICAL_SECTION); stdcall;
{$EXTERNALSYM EnterCriticalSection}

procedure LeaveCriticalSection(var lpCriticalSection: CRITICAL_SECTION); stdcall;
{$EXTERNALSYM LeaveCriticalSection}

function InitializeCriticalSectionAndSpinCount(var lpCriticalSection: CRITICAL_SECTION;
dwSpinCount: DWORD): BOOL; stdcall;
{$EXTERNALSYM InitializeCriticalSectionAndSpinCount}

function SetCriticalSectionSpinCount(var lpCriticalSection: CRITICAL_SECTION;
dwSpinCount: DWORD): DWORD; stdcall;
{$EXTERNALSYM SetCriticalSectionSpinCount}

function TryEnterCriticalSection(var lpCriticalSection: CRITICAL_SECTION): BOOL; stdcall;
{$EXTERNALSYM TryEnterCriticalSection}

procedure DeleteCriticalSection(var lpCriticalSection: CRITICAL_SECTION); stdcall;
{$EXTERNALSYM DeleteCriticalSection}

function SetEvent(hEvent: HANDLE): BOOL; stdcall;
{$EXTERNALSYM SetEvent}

function ResetEvent(hEvent: HANDLE): BOOL; stdcall;
{$EXTERNALSYM ResetEvent}

function PulseEvent(hEvent: HANDLE): BOOL; stdcall;
{$EXTERNALSYM PulseEvent}

function ReleaseSemaphore(hSemaphore: HANDLE; lReleaseCount: LONG;
lpPreviousCount: LPLONG): BOOL; stdcall;
{$EXTERNALSYM ReleaseSemaphore}

function ReleaseMutex(hMutex: HANDLE): BOOL; stdcall;
{$EXTERNALSYM ReleaseMutex}

function WaitForSingleObject(hHandle: HANDLE; dwMilliseconds: DWORD): DWORD; stdcall;
{$EXTERNALSYM WaitForSingleObject}

function WaitForMultipleObjects(nCount: DWORD; lpHandles: PHANDLE; bWaitAll: BOOL;
dwMilliseconds: DWORD): DWORD; stdcall;
{$EXTERNALSYM WaitForMultipleObjects}

procedure Sleep(dwMilliseconds: DWORD); stdcall;
{$EXTERNALSYM Sleep}

function LoadResource(hModule: HMODULE; hResInfo: HRSRC): HGLOBAL; stdcall;
{$EXTERNALSYM LoadResource}

function SizeofResource(hModule: HMODULE; hResInfo: HRSRC): DWORD; stdcall;
{$EXTERNALSYM SizeofResource}

function GlobalDeleteAtom(nAtom: ATOM): ATOM; stdcall;
{$EXTERNALSYM GlobalDeleteAtom}

function InitAtomTable(nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM InitAtomTable}

function DeleteAtom(nAtom: ATOM): ATOM; stdcall;
{$EXTERNALSYM DeleteAtom}

function SetHandleCount(uNumber: UINT): UINT; stdcall;


{$EXTERNALSYM SetHandleCount}

function GetLogicalDrives: DWORD; stdcall;
{$EXTERNALSYM GetLogicalDrives}

function LockFile(hFile: HANDLE; dwFileOffsetLow: DWORD; dwFileOffsetHigh: DWORD;
nNumberOfBytesToLockLow: DWORD; nNumberOfBytesToLockHigh: DWORD): BOOL; stdcall;
{$EXTERNALSYM LockFile}

function UnlockFile(hFile: HANDLE; dwFileOffsetLow: DWORD; dwFileOffsetHigh: DWORD;
nNumberOfBytesToUnlockLow: DWORD; nNumberOfBytesToUnlockHigh: DWORD): BOOL; stdcall;
{$EXTERNALSYM UnlockFile}

function LockFileEx(hFile: HANDLE; dwFlags: DWORD; dwReserved: DWORD;
nNumberOfBytesToLockLow: DWORD; nNumberOfBytesToLockHigh: DWORD;
const lpOverlapped: OVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM LockFileEx}

const
LOCKFILE_FAIL_IMMEDIATELY = $00000001;
{$EXTERNALSYM LOCKFILE_FAIL_IMMEDIATELY}
LOCKFILE_EXCLUSIVE_LOCK = $00000002;
{$EXTERNALSYM LOCKFILE_EXCLUSIVE_LOCK}

function UnlockFileEx(hFile: HANDLE; dwReserved: DWORD;
nNumberOfBytesToUnlockLow: DWORD; nNumberOfBytesToUnlockHigh: DWORD;


const lpOverlapped: OVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM UnlockFileEx}

type
PBY_HANDLE_FILE_INFORMATION = ^BY_HANDLE_FILE_INFORMATION;
{$EXTERNALSYM PBY_HANDLE_FILE_INFORMATION}
_BY_HANDLE_FILE_INFORMATION = record
dwFileAttributes: DWORD;
ftCreationTime: FILETIME;
ftLastAccessTime: FILETIME;
ftLastWriteTime: FILETIME;
dwVolumeSerialNumber: DWORD;
nFileSizeHigh: DWORD;
nFileSizeLow: DWORD;
nNumberOfLinks: DWORD;
nFileIndexHigh: DWORD;
nFileIndexLow: DWORD;
end;
{$EXTERNALSYM _BY_HANDLE_FILE_INFORMATION}
BY_HANDLE_FILE_INFORMATION = _BY_HANDLE_FILE_INFORMATION;
{$EXTERNALSYM BY_HANDLE_FILE_INFORMATION}
LPBY_HANDLE_FILE_INFORMATION = ^BY_HANDLE_FILE_INFORMATION;
{$EXTERNALSYM LPBY_HANDLE_FILE_INFORMATION}
TByHandleFileInformation = BY_HANDLE_FILE_INFORMATION;
PByHandleFileInformation = PBY_HANDLE_FILE_INFORMATION;

function GetFileInformationByHandle(hFile: HANDLE;

var lpFileInformation: BY_HANDLE_FILE_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM GetFileInformationByHandle}

function GetFileType(hFile: HANDLE): DWORD; stdcall;
{$EXTERNALSYM GetFileType}

function GetFileSize(hFile: HANDLE; lpFileSizeHigh: LPDWORD): DWORD; stdcall;
{$EXTERNALSYM GetFileSize}

function GetFileSizeEx(hFile: HANDLE; var lpFileSize: LARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM GetFileSizeEx}

function GetStdHandle(nStdHandle: DWORD): HANDLE; stdcall;
{$EXTERNALSYM GetStdHandle}

function SetStdHandle(nStdHandle: DWORD; hHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM SetStdHandle}

function WriteFile(hFile: HANDLE; lpBuffer: LPCVOID; nNumberOfBytesToWrite: DWORD;
lpNumberOfBytesWritten: LPDWORD; lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM WriteFile}

function ReadFile(hFile: HANDLE; lpBuffer: LPVOID; nNumberOfBytesToRead: DWORD;
lpNumberOfBytesRead: LPDWORD; lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM ReadFile}

function FlushFileBuffers(hFile: HANDLE): BOOL; stdcall;
{$EXTERNALSYM FlushFileBuffers}

function DeviceIoControl(hDevice: HANDLE; dwIoControlCode: DWORD;
lpInBuffer: LPVOID; nInBufferSize: DWORD; lpOutBuffer: LPVOID;
nOutBufferSize: DWORD; lpBytesReturned: LPDWORD;
lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM DeviceIoControl}

function RequestDeviceWakeup(hDevice: HANDLE): BOOL; stdcall;
{$EXTERNALSYM RequestDeviceWakeup}

function CancelDeviceWakeupRequest(hDevice: HANDLE): BOOL; stdcall;
{$EXTERNALSYM CancelDeviceWakeupRequest}

function GetDevicePowerState(hDevice: HANDLE; var pfOn: BOOL): BOOL; stdcall;
{$EXTERNALSYM GetDevicePowerState}

function SetMessageWaitingIndicator(hMsgIndicator: HANDLE; ulMsgCount: ULONG): BOOL; stdcall;
{$EXTERNALSYM SetMessageWaitingIndicator}

function SetEndOfFile(hFile: HANDLE): BOOL; stdcall;
{$EXTERNALSYM SetEndOfFile}

function SetFilePointer(hFile: HANDLE; lDistanceToMove: LONG;
lpDistanceToMoveHigh: PLONG; dwMoveMethod: DWORD): DWORD; stdcall;
{$EXTERNALSYM SetFilePointer}

function SetFilePointerEx(hFile: HANDLE; liDistanceToMove: LARGE_INTEGER;
lpNewFilePointer: PLARGE_INTEGER; dwMoveMethod: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetFilePointerEx}

function FindClose(hFindFile: HANDLE): BOOL; stdcall;
{$EXTERNALSYM FindClose}

function GetFileTime(hFile: HANDLE; lpCreationTime, lpLastAccessTime,
lpLastWriteTime: PFILETIME): BOOL; stdcall;
{$EXTERNALSYM GetFileTime}

function SetFileTime(hFile: HANDLE; lpCreationTime, lpLastAccessTime,
lpLastWriteTime: PFILETIME): BOOL; stdcall;
{$EXTERNALSYM SetFileTime}

function SetFileValidData(hFile: HANDLE; ValidDataLength: LONGLONG): BOOL; stdcall;
{$EXTERNALSYM SetFileValidData}

function SetFileShortNameA(hFile: HANDLE; lpShortName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetFileShortNameA}
function SetFileShortNameW(hFile: HANDLE; lpShortName: LPCWSTR): BOOL; stdcall;

{$EXTERNALSYM SetFileShortNameW}

{$IFDEF UNICODE}
function SetFileShortName(hFile: HANDLE; lpShortName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetFileShortName}
{$ELSE}
function SetFileShortName(hFile: HANDLE; lpShortName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetFileShortName}
{$ENDIF}

function CloseHandle(hObject: HANDLE): BOOL; stdcall;
{$EXTERNALSYM CloseHandle}

function DuplicateHandle(hSourceProcessHandle: HANDLE; hSourceHandle: HANDLE;
hTargetProcessHandle: HANDLE; lpTargetHandle: LPHANDLE;
dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwOptions: DWORD): BOOL; stdcall;
{$EXTERNALSYM DuplicateHandle}

function GetHandleInformation(hObject: HANDLE; var lpdwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetHandleInformation}

function SetHandleInformation(hObject: HANDLE; dwMask: DWORD; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetHandleInformation}

const
HANDLE_FLAG_INHERIT = $00000001;
{$EXTERNALSYM HANDLE_FLAG_INHERIT}
HANDLE_FLAG_PROTECT_FROM_CLOSE = $00000002;
{$EXTERNALSYM HANDLE_FLAG_PROTECT_FROM_CLOSE}

HINSTANCE_ERROR = 32;
{$EXTERNALSYM HINSTANCE_ERROR}

function LoadModule(lpModuleName: LPCSTR; lpParameterBlock: LPVOID): DWORD; stdcall;
{$EXTERNALSYM LoadModule}

function WinExec(lpCmdLine: LPCSTR; uCmdShow: UINT): UINT; stdcall;
{$EXTERNALSYM WinExec}

function ClearCommBreak(hFile: HANDLE): BOOL; stdcall;
{$EXTERNALSYM ClearCommBreak}

function ClearCommError(hFile: HANDLE; var lpErrors: DWORD;
lpStat: LPCOMSTAT): BOOL; stdcall;
{$EXTERNALSYM ClearCommError}

function SetupComm(hFile: HANDLE; dwInQueue: DWORD; dwOutQueue: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetupComm}

function EscapeCommFunction(hFile: HANDLE; dwFunc: DWORD): BOOL; stdcall;
{$EXTERNALSYM EscapeCommFunction}

function GetCommConfig(hCommDev: HANDLE; var lpCC: COMMCONFIG;
var lpdwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetCommConfig}


function GetCommMask(hFile: HANDLE; var lpEvtMask: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetCommMask}

function GetCommProperties(hFile: HANDLE; var lpCommProp: COMMPROP): BOOL; stdcall;
{$EXTERNALSYM GetCommProperties}

function GetCommModemStatus(hFile: HANDLE; var lpModemStat: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetCommModemStatus}

function GetCommState(hFile: HANDLE; var lpDCB: DCB): BOOL; stdcall;
{$EXTERNALSYM GetCommState}

function GetCommTimeouts(hFile: HANDLE; var lpCommTimeouts: COMMTIMEOUTS): BOOL; stdcall;
{$EXTERNALSYM GetCommTimeouts}

function PurgeComm(hFile: HANDLE; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM PurgeComm}

function SetCommBreak(hFile: HANDLE): BOOL; stdcall;
{$EXTERNALSYM SetCommBreak}

function SetCommConfig(hCommDev: HANDLE; const lpCC: COMMCONFIG; dwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetCommConfig}

function SetCommMask(hFile: HANDLE; dwEvtMask: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetCommMask}

function SetCommState(hFile: HANDLE; const lpDCB: DCB): BOOL; stdcall;
{$EXTERNALSYM SetCommState}

function SetCommTimeouts(hFile: HANDLE; const lpCommTimeouts: COMMTIMEOUTS): BOOL; stdcall;
{$EXTERNALSYM SetCommTimeouts}

function TransmitCommChar(hFile: HANDLE; cChar: Char): BOOL; stdcall;
{$EXTERNALSYM TransmitCommChar}

function WaitCommEvent(hFile: HANDLE; var lpEvtMask: DWORD;
lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM WaitCommEvent}

function SetTapePosition(hDevice: HANDLE; dwPositionMethod, dwPartition,
dwOffsetLow, dwOffsetHigh: DWORD; bImmediate: BOOL): DWORD; stdcall;
{$EXTERNALSYM SetTapePosition}

function GetTapePosition(hDevice: HANDLE; dwPositionType: DWORD;
var lpdwPartition, lpdwOffsetLow: LPDWORD; lpdwOffsetHigh: LPDWORD): DWORD; stdcall;
{$EXTERNALSYM GetTapePosition}

function PrepareTape(hDevice: HANDLE; dwOperation: DWORD; bImmediate: BOOL): DWORD; stdcall;
{$EXTERNALSYM PrepareTape}

function EraseTape(hDevice: HANDLE; dwEraseType: DWORD; bImmediate: BOOL): DWORD; stdcall;


{$EXTERNALSYM EraseTape}

function CreateTapePartition(hDevice: HANDLE; dwPartitionMethod: DWORD;
dwCount: DWORD; dwSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM CreateTapePartition}

function WriteTapemark(hDevice: HANDLE; dwTapemarkType: DWORD;
dwTapemarkCount: DWORD; bImmediate: BOOL): DWORD; stdcall;
{$EXTERNALSYM WriteTapemark}

function GetTapeStatus(hDevice: HANDLE): DWORD; stdcall;
{$EXTERNALSYM GetTapeStatus}

function GetTapeParameters(hDevice: HANDLE; dwOperation: DWORD;
var lpdwSize: DWORD; lpTapeInformation: LPVOID): DWORD; stdcall;
{$EXTERNALSYM GetTapeParameters}

const
GET_TAPE_MEDIA_INFORMATION = 0;
{$EXTERNALSYM GET_TAPE_MEDIA_INFORMATION}
GET_TAPE_DRIVE_INFORMATION = 1;
{$EXTERNALSYM GET_TAPE_DRIVE_INFORMATION}

function SetTapeParameters(hDevice: HANDLE; dwOperation: DWORD; lpTapeInformation: LPVOID): DWORD; stdcall;
{$EXTERNALSYM SetTapeParameters}

const
SET_TAPE_MEDIA_INFORMATION = 0;
{$EXTERNALSYM SET_TAPE_MEDIA_INFORMATION}
SET_TAPE_DRIVE_INFORMATION = 1;
{$EXTERNALSYM SET_TAPE_DRIVE_INFORMATION}

function Beep(dwFreq: DWORD; dwDuration: DWORD): BOOL; stdcall;
{$EXTERNALSYM Beep}

function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; stdcall;
{$EXTERNALSYM MulDiv}

procedure GetSystemTime(var lpSystemTime: SYSTEMTIME); stdcall;
{$EXTERNALSYM GetSystemTime}

procedure GetSystemTimeAsFileTime(var lpSystemTimeAsFileTime: FILETIME); stdcall;
{$EXTERNALSYM GetSystemTimeAsFileTime}

function SetSystemTime(var lpSystemTime: SYSTEMTIME): BOOL; stdcall;
{$EXTERNALSYM SetSystemTime}

procedure GetLocalTime(var lpSystemTime: SYSTEMTIME); stdcall;
{$EXTERNALSYM GetLocalTime}

function SetLocalTime(var lpSystemTime: SYSTEMTIME): BOOL; stdcall;
{$EXTERNALSYM SetLocalTime}

procedure GetSystemInfo(var lpSystemInfo: SYSTEM_INFO); stdcall;
{$EXTERNALSYM GetSystemInfo}

procedure GetNativeSystemInfo(lpSystemInfo: LPSYSTEM_INFO); stdcall;
{$EXTERNALSYM GetNativeSystemInfo}



function IsProcessorFeaturePresent(ProcessorFeature: DWORD): BOOL; stdcall;
{$EXTERNALSYM IsProcessorFeaturePresent}

type
PTIME_ZONE_INFORMATION = ^TIME_ZONE_INFORMATION;
{$EXTERNALSYM PTIME_ZONE_INFORMATION}
_TIME_ZONE_INFORMATION = record
Bias: LONG;
StandardName: array [0..31] of WCHAR;
StandardDate: SYSTEMTIME;
StandardBias: LONG;
DaylightName: array [0..31] of WCHAR;
DaylightDate: SYSTEMTIME;
DaylightBias: LONG;
end;
{$EXTERNALSYM _TIME_ZONE_INFORMATION}
TIME_ZONE_INFORMATION = _TIME_ZONE_INFORMATION;
{$EXTERNALSYM TIME_ZONE_INFORMATION}
LPTIME_ZONE_INFORMATION = ^TIME_ZONE_INFORMATION;
{$EXTERNALSYM LPTIME_ZONE_INFORMATION}
TTimeZoneInformation = TIME_ZONE_INFORMATION;
PTimeZoneInformation = PTIME_ZONE_INFORMATION;

function SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation: LPTIME_ZONE_INFORMATION;
var lpUniversalTime, lpLocalTime: SYSTEMTIME): BOOL; stdcall;
{$EXTERNALSYM SystemTimeToTzSpecificLocalTime}

function TzSpecificLocalTimeToSystemTime(const lpTimeZoneInformation: TIME_ZONE_INFORMATION;
const lpLocalTime: SYSTEMTIME; var lpUniversalTime: SYSTEMTIME): BOOL; stdcall;
{$EXTERNALSYM TzSpecificLocalTimeToSystemTime}

function GetTimeZoneInformation(var lpTimeZoneInformation: TIME_ZONE_INFORMATION): DWORD; stdcall;
{$EXTERNALSYM GetTimeZoneInformation}

function SetTimeZoneInformation(const lpTimeZoneInformation: TIME_ZONE_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM SetTimeZoneInformation}

//
// Routines to convert back and forth between system time and file time
//

function SystemTimeToFileTime(const lpSystemTime: SYSTEMTIME; var lpFileTime: FILETIME): BOOL; stdcall;
{$EXTERNALSYM SystemTimeToFileTime}

function FileTimeToLocalFileTime(const lpFileTime: FILETIME; var lpLocalFileTime: FILETIME): BOOL; stdcall;
{$EXTERNALSYM FileTimeToLocalFileTime}

function LocalFileTimeToFileTime(const lpLocalFileTime: FILETIME; var lpFileTime: FILETIME): BOOL; stdcall;


{$EXTERNALSYM LocalFileTimeToFileTime}

function FileTimeToSystemTime(const lpFileTime: FILETIME; var lpSystemTime: SYSTEMTIME): BOOL; stdcall;
{$EXTERNALSYM FileTimeToSystemTime}

function CompareFileTime(const lpFileTime1, lpFileTime2: FILETIME): LONG; stdcall;
{$EXTERNALSYM CompareFileTime}

function FileTimeToDosDateTime(const lpFileTime: FILETIME; var lpFatDate,
lpFatTime: WORD): BOOL; stdcall;
{$EXTERNALSYM FileTimeToDosDateTime}

function DosDateTimeToFileTime(wFatDate, wFatTime: WORD; var lpFileTime: FILETIME): BOOL; stdcall;
{$EXTERNALSYM DosDateTimeToFileTime}

function GetTickCount: DWORD; stdcall;
{$EXTERNALSYM GetTickCount}

function SetSystemTimeAdjustment(dwTimeAdjustment: DWORD;
bTimeAdjustmentDisabled: BOOL): BOOL; stdcall;
{$EXTERNALSYM SetSystemTimeAdjustment}

function GetSystemTimeAdjustment(var lpTimeAdjustment, lpTimeIncrement: DWORD;
var lpTimeAdjustmentDisabled: BOOL): BOOL; stdcall;
{$EXTERNALSYM GetSystemTimeAdjustment}

function FormatMessageA(dwFlags: DWORD; lpSource: LPCVOID; dwMessageId: DWORD;
dwLanguageId: DWORD; lpBuffer: LPSTR; nSize: DWORD; Arguments: Pointer): DWORD; stdcall;
{$EXTERNALSYM FormatMessageA}
function FormatMessageW(dwFlags: DWORD; lpSource: LPCVOID; dwMessageId: DWORD;
dwLanguageId: DWORD; lpBuffer: LPWSTR; nSize: DWORD; Arguments: Pointer): DWORD; stdcall;
{$EXTERNALSYM FormatMessageW}

{$IFDEF UNICODE}
function FormatMessage(dwFlags: DWORD; lpSource: LPCVOID; dwMessageId: DWORD;
dwLanguageId: DWORD; lpBuffer: LPWSTR; nSize: DWORD; Arguments: Pointer): DWORD; stdcall;
{$EXTERNALSYM FormatMessage}
{$ELSE}
function FormatMessage(dwFlags: DWORD; lpSource: LPCVOID; dwMessageId: DWORD;
dwLanguageId: DWORD; lpBuffer: LPSTR; nSize: DWORD; Arguments: Pointer): DWORD; stdcall;
{$EXTERNALSYM FormatMessage}
{$ENDIF}

const
FORMAT_MESSAGE_ALLOCATE_BUFFER = $00000100;
{$EXTERNALSYM FORMAT_MESSAGE_ALLOCATE_BUFFER}
FORMAT_MESSAGE_IGNORE_INSERTS = $00000200;
{$EXTERNALSYM FORMAT_MESSAGE_IGNORE_INSERTS}
FORMAT_MESSAGE_FROM_STRING = $00000400;
{$EXTERNALSYM FORMAT_MESSAGE_FROM_STRING}
FORMAT_MESSAGE_FROM_HMODULE = $00000800;
{$EXTERNALSYM FORMAT_MESSAGE_FROM_HMODULE}
FORMAT_MESSAGE_FROM_SYSTEM = $00001000;
{$EXTERNALSYM FORMAT_MESSAGE_FROM_SYSTEM}
FORMAT_MESSAGE_ARGUMENT_ARRAY = $00002000;
{$EXTERNALSYM FORMAT_MESSAGE_ARGUMENT_ARRAY}
FORMAT_MESSAGE_MAX_WIDTH_MASK = $000000FF;
{$EXTERNALSYM FORMAT_MESSAGE_MAX_WIDTH_MASK}

function CreatePipe(var hReadPipe, hWritePipe: HANDLE;
lpPipeAttributes: LPSECURITY_ATTRIBUTES; nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM CreatePipe}

function ConnectNamedPipe(hNamedPipe: HANDLE; lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM ConnectNamedPipe}

function DisconnectNamedPipe(hNamedPipe: HANDLE): BOOL; stdcall;
{$EXTERNALSYM DisconnectNamedPipe}

function SetNamedPipeHandleState(hNamedPipe: HANDLE; var lpMode: DWORD;
lpMaxCollectionCount: LPDWORD; lpCollectDataTimeout: LPDWORD): BOOL; stdcall;
{$EXTERNALSYM SetNamedPipeHandleState}

function GetNamedPipeInfo(hNamedPipe: HANDLE; lpFlags, lpOutBufferSize,
lpInBufferSize, lpMaxInstances: LPDWORD): BOOL; stdcall;
{$EXTERNALSYM GetNamedPipeInfo}

function PeekNamedPipe(hNamedPipe: HANDLE; lpBuffer: LPVOID; nBufferSize: DWORD;
lpBytesRead, lpTotalBytesAvail, lpBytesLeftThisMessage: LPDWORD): BOOL; stdcall;
{$EXTERNALSYM PeekNamedPipe}

function TransactNamedPipe(hNamedPipe: HANDLE; lpInBuffer: LPVOID;
nInBufferSize: DWORD; lpOutBuffer: LPVOID; nOutBufferSize: DWORD;
lpBytesRead: LPDWORD; lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM TransactNamedPipe}

function CreateMailslotA(lpName: LPCSTR; nMaxMessageSize, lReadTimeout: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): HANDLE; stdcall;
{$EXTERNALSYM CreateMailslotA}
function CreateMailslotW(lpName: LPCWSTR; nMaxMessageSize, lReadTimeout: DWORD;

lpSecurityAttributes: LPSECURITY_ATTRIBUTES): HANDLE; stdcall;
{$EXTERNALSYM CreateMailslotW}

{$IFDEF UNICODE}
function CreateMailslot(lpName: LPCWSTR; nMaxMessageSize, lReadTimeout: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): HANDLE; stdcall;
{$EXTERNALSYM CreateMailslot}
{$ELSE}
function CreateMailslot(lpName: LPCSTR; nMaxMessageSize, lReadTimeout: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): HANDLE; stdcall;
{$EXTERNALSYM CreateMailslot}
{$ENDIF}

function GetMailslotInfo(hMailslot: HANDLE; lpMaxMessageSize, lpNextSize,
lpMessageCount, lpReadTimeout: LPDWORD): BOOL; stdcall;
{$EXTERNALSYM GetMailslotInfo}

function SetMailslotInfo(hMailslot: HANDLE; lReadTimeout: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetMailslotInfo}

function MapViewOfFile(hFileMappingObject: HANDLE; dwDesiredAccess: DWORD;
dwFileOffsetHigh, dwFileOffsetLow: DWORD; dwNumberOfBytesToMap: SIZE_T): LPVOID; stdcall;
{$EXTERNALSYM MapViewOfFile}

function FlushViewOfFile(lpBaseAddress: LPCVOID; dwNumberOfBytesToFlush: SIZE_T): BOOL; stdcall;
{$EXTERNALSYM FlushViewOfFile}

function UnmapViewOfFile(lpBaseAddress: LPCVOID): BOOL; stdcall;
{$EXTERNALSYM UnmapViewOfFile}

//
// File Encryption API
//

function EncryptFileA(lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM EncryptFileA}
function EncryptFileW(lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM EncryptFileW}

{$IFDEF UNICODE}
function EncryptFile(lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM EncryptFile}
{$ELSE}
function EncryptFile(lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM EncryptFile}
{$ENDIF}

function DecryptFileA(lpFileName: LPCSTR; dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM DecryptFileA}
function DecryptFileW(lpFileName: LPCWSTR; dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM DecryptFileW}

{$IFDEF UNICODE}
function DecryptFile(lpFileName: LPCWSTR; dwReserved: DWORD): BOOL; stdcall;


{$EXTERNALSYM DecryptFile}
{$ELSE}
function DecryptFile(lpFileName: LPCSTR; dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM DecryptFile}
{$ENDIF}

//
// Encryption Status Value
//

const
FILE_ENCRYPTABLE = 0;
{$EXTERNALSYM FILE_ENCRYPTABLE}
FILE_IS_ENCRYPTED = 1;
{$EXTERNALSYM FILE_IS_ENCRYPTED}
FILE_SYSTEM_ATTR = 2;
{$EXTERNALSYM FILE_SYSTEM_ATTR}
FILE_ROOT_DIR = 3;
{$EXTERNALSYM FILE_ROOT_DIR}
FILE_SYSTEM_DIR = 4;
{$EXTERNALSYM FILE_SYSTEM_DIR}
FILE_UNKNOWN = 5;
{$EXTERNALSYM FILE_UNKNOWN}
FILE_SYSTEM_NOT_SUPPORT = 6;
{$EXTERNALSYM FILE_SYSTEM_NOT_SUPPORT}
FILE_USER_DISALLOWED = 7;
{$EXTERNALSYM FILE_USER_DISALLOWED}
FILE_READ_ONLY = 8;
{$EXTERNALSYM FILE_READ_ONLY}
FILE_DIR_DISALLOWED = 9;
{$EXTERNALSYM FILE_DIR_DISALLOWED}

function FileEncryptionStatusA(lpFileName: LPCSTR; var lpStatus: DWORD): BOOL; stdcall;

{$EXTERNALSYM FileEncryptionStatusA}
function FileEncryptionStatusW(lpFileName: LPCWSTR; var lpStatus: DWORD): BOOL; stdcall;
{$EXTERNALSYM FileEncryptionStatusW}

{$IFDEF UNICODE}
function FileEncryptionStatus(lpFileName: LPCWSTR; var lpStatus: DWORD): BOOL; stdcall;
{$EXTERNALSYM FileEncryptionStatus}
{$ELSE}
function FileEncryptionStatus(lpFileName: LPCSTR; var lpStatus: DWORD): BOOL; stdcall;
{$EXTERNALSYM FileEncryptionStatus}
{$ENDIF}

//
// Currently defined recovery flags
//

const
EFS_USE_RECOVERY_KEYS = ($1);
{$EXTERNALSYM EFS_USE_RECOVERY_KEYS}

type
PFE_EXPORT_FUNC = function (pbData: PBYTE; pvCallbackContext: PVOID;
ulLength: ULONG): DWORD; stdcall;
{$EXTERNALSYM PFE_EXPORT_FUNC}

PFE_IMPORT_FUNC = function (pbData: PBYTE; pvCallbackContext: PVOID;
ulLength: PULONG): DWORD; stdcall;
{$EXTERNALSYM PFE_IMPORT_FUNC}

//
// OpenRaw flag values
//

const
CREATE_FOR_IMPORT = (1);
{$EXTERNALSYM CREATE_FOR_IMPORT}
CREATE_FOR_DIR = (2);
{$EXTERNALSYM CREATE_FOR_DIR}
OVERWRITE_HIDDEN = (4);
{$EXTERNALSYM OVERWRITE_HIDDEN}

function OpenEncryptedFileRawA(lpFileName: LPCSTR; ulFlags: ULONG;
pvContext: PVOID): DWORD; stdcall;
{$EXTERNALSYM OpenEncryptedFileRawA}
function OpenEncryptedFileRawW(lpFileName: LPCWSTR; ulFlags: ULONG;
pvContext: PVOID): DWORD; stdcall;
{$EXTERNALSYM OpenEncryptedFileRawW}

{$IFDEF UNICODE}
function OpenEncryptedFileRaw(lpFileName: LPCWSTR; ulFlags: ULONG;
pvContext: PVOID): DWORD; stdcall;
{$EXTERNALSYM OpenEncryptedFileRaw}
{$ELSE}
function OpenEncryptedFileRaw(lpFileName: LPCSTR; ulFlags: ULONG;
pvContext: PVOID): DWORD; stdcall;
{$EXTERNALSYM OpenEncryptedFileRaw}
{$ENDIF}

function ReadEncryptedFileRaw(pfExportCallback: PFE_EXPORT_FUNC;
pvCallbackContext: PVOID; pvContext: PVOID): DWORD; stdcall;
{$EXTERNALSYM ReadEncryptedFileRaw}

function WriteEncryptedFileRaw(pfImportCallback: PFE_IMPORT_FUNC;

pvCallbackContext: PVOID; pvContext: PVOID): DWORD; stdcall;
{$EXTERNALSYM WriteEncryptedFileRaw}

procedure CloseEncryptedFileRaw(pvContext: PVOID); stdcall;
{$EXTERNALSYM CloseEncryptedFileRaw}

//
// _l Compat Functions
//

function lstrcmpA(lpString1, lpString2: LPCSTR): Integer; stdcall;
{$EXTERNALSYM lstrcmpA}
function lstrcmpW(lpString1, lpString2: LPCWSTR): Integer; stdcall;
{$EXTERNALSYM lstrcmpW}

{$IFDEF UNICODE}
function lstrcmp(lpString1, lpString2: LPCWSTR): Integer; stdcall;
{$EXTERNALSYM lstrcmp}
{$ELSE}
function lstrcmp(lpString1, lpString2: LPCSTR): Integer; stdcall;
{$EXTERNALSYM lstrcmp}
{$ENDIF}

function lstrcmpiA(lpString1, lpString2: LPCSTR): Integer; stdcall;
{$EXTERNALSYM lstrcmpiA}
function lstrcmpiW(lpString1, lpString2: LPCWSTR): Integer; stdcall;
{$EXTERNALSYM lstrcmpiW}

{$IFDEF UNICODE}
function lstrcmpi(lpString1, lpString2: LPCWSTR): Integer; stdcall;
{$EXTERNALSYM lstrcmpi}
{$ELSE}
function lstrcmpi(lpString1, lpString2: LPCSTR): Integer; stdcall;
{$EXTERNALSYM lstrcmpi}
{$ENDIF}

function lstrcpynA(lpString1: LPSTR; lpString2: LPCSTR; iMaxLength: Integer): LPSTR; stdcall;
{$EXTERNALSYM lstrcpynA}
function lstrcpynW(lpString1: LPWSTR; lpString2: LPCWSTR; iMaxLength: Integer): LPWSTR; stdcall;
{$EXTERNALSYM lstrcpynW}

{$IFDEF UNICODE}
function lstrcpyn(lpString1: LPWSTR; lpString2: LPCWSTR; iMaxLength: Integer): LPWSTR; stdcall;
{$EXTERNALSYM lstrcpyn}
{$ELSE}
function lstrcpyn(lpString1: LPSTR; lpString2: LPCSTR; iMaxLength: Integer): LPSTR; stdcall;
{$EXTERNALSYM lstrcpyn}
{$ENDIF}

function lstrcpyA(lpString1: LPSTR; lpString2: LPCSTR): LPSTR; stdcall;
{$EXTERNALSYM lstrcpyA}
function lstrcpyW(lpString1: LPWSTR; lpString2: LPCWSTR): LPWSTR; stdcall;
{$EXTERNALSYM lstrcpyW}

{$IFDEF UNICODE}
function lstrcpy(lpString1: LPWSTR; lpString2: LPCWSTR): LPWSTR; stdcall;
{$EXTERNALSYM lstrcpy}
{$ELSE}
function lstrcpy(lpString1: LPSTR; lpString2: LPCSTR): LPSTR; stdcall;
{$EXTERNALSYM lstrcpy}
{$ENDIF}

function lstrcatA(lpString1: LPSTR; lpString2: LPCSTR): LPSTR; stdcall;
{$EXTERNALSYM lstrcatA}
function lstrcatW(lpString1: LPWSTR; lpString2: LPCWSTR): LPWSTR; stdcall;
{$EXTERNALSYM lstrcatW}

{$IFDEF UNICODE}
function lstrcat(lpString1: LPWSTR; lpString2: LPCWSTR): LPWSTR; stdcall;
{$EXTERNALSYM lstrcat}
{$ELSE}
function lstrcat(lpString1: LPSTR; lpString2: LPCSTR): LPSTR; stdcall;
{$EXTERNALSYM lstrcat}
{$ENDIF}

function lstrlenA(lpString: LPCSTR): Integer; stdcall;
{$EXTERNALSYM lstrlenA}
function lstrlenW(lpString: LPCWSTR): Integer; stdcall;
{$EXTERNALSYM lstrlenW}

{$IFDEF UNICODE}
function lstrlen(lpString: LPCWSTR): Integer; stdcall;
{$EXTERNALSYM lstrlen}
{$ELSE}
function lstrlen(lpString: LPCSTR): Integer; stdcall;
{$EXTERNALSYM lstrlen}
{$ENDIF}

function OpenFile(lpFileName: LPCSTR; var lpReOpenBuff: OFSTRUCT; uStyle: UINT): HFILE; stdcall;
{$EXTERNALSYM OpenFile}

function _lopen(lpPathName: LPCSTR; iReadWrite: Integer): HFILE; stdcall;
{$EXTERNALSYM _lopen}

function _lcreat(lpPathName: LPCSTR; iAttribute: Integer): HFILE; stdcall;
{$EXTERNALSYM _lcreat}

function _lread(hFile: HFILE; lpBuffer: LPVOID; uBytes: UINT): UINT; stdcall;
{$EXTERNALSYM _lread}

function _lwrite(hFile: HFILE; lpBuffer: LPCSTR; uBytes: UINT): UINT; stdcall;
{$EXTERNALSYM _lwrite}

function _hread(hFile: HFILE; lpBuffer: LPVOID; lBytes: Longint): Longint; stdcall;
{$EXTERNALSYM _hread}

function _hwrite(hFile: HFILE; lpBuffer: LPCSTR; lBytes: Longint): Longint; stdcall;
{$EXTERNALSYM _hwrite}

function _lclose(hFile: HFILE): HFILE; stdcall;
{$EXTERNALSYM _lclose}

function _llseek(hFile: HFILE; lOffset: LONG; iOrigin: Integer): LONG; stdcall;
{$EXTERNALSYM _llseek}

function IsTextUnicode(lpBuffer: LPVOID; cb: Integer; lpi: LPINT): BOOL; stdcall;
{$EXTERNALSYM IsTextUnicode}

type
PFLS_CALLBACK_FUNCTION = procedure (lpFlsData: PVOID); stdcall;
{$EXTERNALSYM PFLS_CALLBACK_FUNCTION}

TFlsCallbackFunction = PFLS_CALLBACK_FUNCTION;

const
FLS_OUT_OF_INDEXES = DWORD($FFFFFFFF);
{$EXTERNALSYM FLS_OUT_OF_INDEXES}

function FlsAlloc(lpCallback: PFLS_CALLBACK_FUNCTION): DWORD; stdcall;
{$EXTERNALSYM FlsAlloc}

function FlsGetValue(dwFlsIndex: DWORD): DWORD; stdcall;
{$EXTERNALSYM FlsGetValue}

function FlsSetValue(dwFlsIndex: DWORD; lpFlsData: PVOID): DWORD; stdcall;
{$EXTERNALSYM FlsSetValue}

function FlsFree(dwFlsIndex: DWORD): DWORD; stdcall;
{$EXTERNALSYM FlsFree}

const
TLS_OUT_OF_INDEXES = DWORD($FFFFFFFF);
{$EXTERNALSYM TLS_OUT_OF_INDEXES}

function TlsAlloc: DWORD; stdcall;
{$EXTERNALSYM TlsAlloc}

function TlsGetValue(dwTlsIndex: DWORD): LPVOID; stdcall;
{$EXTERNALSYM TlsGetValue}

function TlsSetValue(dwTlsIndex: DWORD; lpTlsValue: LPVOID): BOOL; stdcall;
{$EXTERNALSYM TlsSetValue}

function TlsFree(dwTlsIndex: DWORD): BOOL; stdcall;
{$EXTERNALSYM TlsFree}

type
LPOVERLAPPED_COMPLETION_ROUTINE = procedure (dwErrorCode: DWORD;
dwNumberOfBytesTransfered: DWORD; lpOverlapped: LPOVERLAPPED); stdcall;
{$EXTERNALSYM LPOVERLAPPED_COMPLETION_ROUTINE}
TOverlappedCompletionRoutine = LPOVERLAPPED_COMPLETION_ROUTINE;

function SleepEx(dwMilliseconds: DWORD; bAlertable: BOOL): DWORD; stdcall;
{$EXTERNALSYM SleepEx}

function WaitForSingleObjectEx(hHandle: HANDLE; dwMilliseconds: DWORD;
bAlertable: BOOL): DWORD; stdcall;
{$EXTERNALSYM WaitForSingleObjectEx}

function WaitForMultipleObjectsEx(nCount: DWORD; lpHandles: PHANDLE;
bWaitAll: BOOL; dwMilliseconds: DWORD; bAlertable: BOOL): DWORD; stdcall;
{$EXTERNALSYM WaitForMultipleObjectsEx}

function SignalObjectAndWait(hObjectToSignal: HANDLE; hObjectToWaitOn: HANDLE;
dwMilliseconds: DWORD; bAlertable: BOOL): DWORD; stdcall;
{$EXTERNALSYM SignalObjectAndWait}

function ReadFileEx(hFile: HANDLE; lpBuffer: LPVOID; nNumberOfBytesToRead: DWORD;
lpOverlapped: LPOVERLAPPED; lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE): BOOL; stdcall;

{$EXTERNALSYM ReadFileEx}

function WriteFileEx(hFile: HANDLE; lpBuffer: LPCVOID; nNumberOfBytesToWrite: DWORD;
lpOverlapped: LPOVERLAPPED; lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE): BOOL; stdcall;
{$EXTERNALSYM WriteFileEx}

function BackupRead(hFile: HANDLE; lpBuffer: LPBYTE;
nNumberOfBytesToRead: DWORD; var lpNumberOfBytesRead: DWORD;
bAbort, bProcessSecurity: BOOL; var lpContext: LPVOID): BOOL; stdcall;
{$EXTERNALSYM BackupRead}

function BackupSeek(hFile: HANDLE; dwLowBytesToSeek, dwHighBytesToSeek: DWORD;
var lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD; var lpContext: LPVOID): BOOL; stdcall;
{$EXTERNALSYM BackupSeek}

function BackupWrite(hFile: HANDLE; lpBuffer: LPBYTE; nNumberOfBytesToWrite: DWORD;
var lpNumberOfBytesWritten: DWORD; bAbort, bProcessSecurity: BOOL;
var lpContext: LPVOID): BOOL; stdcall;
{$EXTERNALSYM BackupWrite}

//
// Stream id structure
//

type
LPWIN32_STREAM_ID = ^WIN32_STREAM_ID;

{$EXTERNALSYM LPWIN32_STREAM_ID}
_WIN32_STREAM_ID = record
dwStreamId: DWORD;
dwStreamAttributes: DWORD;
Size: TLargeInteger;
dwStreamNameSize: DWORD;
cStreamName: array [0..ANYSIZE_ARRAY - 1] of WCHAR;
end;
{$EXTERNALSYM _WIN32_STREAM_ID}
WIN32_STREAM_ID = _WIN32_STREAM_ID;
{$EXTERNALSYM WIN32_STREAM_ID}
TWin32StreamId = WIN32_STREAM_ID;
PWin32StreamId = LPWIN32_STREAM_ID;

//
// Stream Ids
//

const
BACKUP_INVALID = $00000000;
{$EXTERNALSYM BACKUP_INVALID}
BACKUP_DATA = $00000001;
{$EXTERNALSYM BACKUP_DATA}
BACKUP_EA_DATA = $00000002;
{$EXTERNALSYM BACKUP_EA_DATA}
BACKUP_SECURITY_DATA = $00000003;
{$EXTERNALSYM BACKUP_SECURITY_DATA}
BACKUP_ALTERNATE_DATA = $00000004;
{$EXTERNALSYM BACKUP_ALTERNATE_DATA}
BACKUP_LINK = $00000005;
{$EXTERNALSYM BACKUP_LINK}
BACKUP_PROPERTY_DATA = $00000006;
{$EXTERNALSYM BACKUP_PROPERTY_DATA}
BACKUP_OBJECT_ID = $00000007;
{$EXTERNALSYM BACKUP_OBJECT_ID}
BACKUP_REPARSE_DATA = $00000008;
{$EXTERNALSYM BACKUP_REPARSE_DATA}
BACKUP_SPARSE_BLOCK = $00000009;
{$EXTERNALSYM BACKUP_SPARSE_BLOCK}

//
// Stream Attributes
//

const
STREAM_NORMAL_ATTRIBUTE = $00000000;
{$EXTERNALSYM STREAM_NORMAL_ATTRIBUTE}
STREAM_MODIFIED_WHEN_READ = $00000001;
{$EXTERNALSYM STREAM_MODIFIED_WHEN_READ}
STREAM_CONTAINS_SECURITY = $00000002;
{$EXTERNALSYM STREAM_CONTAINS_SECURITY}
STREAM_CONTAINS_PROPERTIES = $00000004;
{$EXTERNALSYM STREAM_CONTAINS_PROPERTIES}
STREAM_SPARSE_ATTRIBUTE = $00000008;
{$EXTERNALSYM STREAM_SPARSE_ATTRIBUTE}

function ReadFileScatter(hFile: HANDLE; aSegmentArray: PFILE_SEGMENT_ELEMENT;
nNumberOfBytesToRead: DWORD; lpReserved: LPDWORD; lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM ReadFileScatter}

function WriteFileGather(hFile: HANDLE; aSegmentArray: PFILE_SEGMENT_ELEMENT;
nNumberOfBytesToWrite: DWORD; lpReserved: LPDWORD; lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM WriteFileGather}

//
// Dual Mode API below this line. Dual Mode Structures also included.
//

const
STARTF_USESHOWWINDOW = $00000001;
{$EXTERNALSYM STARTF_USESHOWWINDOW}
STARTF_USESIZE = $00000002;
{$EXTERNALSYM STARTF_USESIZE}
STARTF_USEPOSITION = $00000004;
{$EXTERNALSYM STARTF_USEPOSITION}
STARTF_USECOUNTCHARS = $00000008;
{$EXTERNALSYM STARTF_USECOUNTCHARS}
STARTF_USEFILLATTRIBUTE = $00000010;
{$EXTERNALSYM STARTF_USEFILLATTRIBUTE}
STARTF_RUNFULLSCREEN = $00000020; // ignored for non-x86 platforms
{$EXTERNALSYM STARTF_RUNFULLSCREEN}
STARTF_FORCEONFEEDBACK = $00000040;
{$EXTERNALSYM STARTF_FORCEONFEEDBACK}
STARTF_FORCEOFFFEEDBACK = $00000080;
{$EXTERNALSYM STARTF_FORCEOFFFEEDBACK}
STARTF_USESTDHANDLES = $00000100;
{$EXTERNALSYM STARTF_USESTDHANDLES}

STARTF_USEHOTKEY = $00000200;


{$EXTERNALSYM STARTF_USEHOTKEY}

type
LPSTARTUPINFOA = ^STARTUPINFOA;
{$EXTERNALSYM LPSTARTUPINFOA}
_STARTUPINFOA = record
cb: DWORD;
lpReserved: LPSTR;
lpDesktop: LPSTR;
lpTitle: LPSTR;
dwX: DWORD;
dwY: DWORD;
dwXSize: DWORD;
dwYSize: DWORD;
dwXCountChars: DWORD;
dwYCountChars: DWORD;
dwFillAttribute: DWORD;
dwFlags: DWORD;
wShowWindow: WORD;
cbReserved2: WORD;
lpReserved2: LPBYTE;
hStdInput: HANDLE;
hStdOutput: HANDLE;
hStdError: HANDLE;
end;
{$EXTERNALSYM _STARTUPINFOA}
STARTUPINFOA = _STARTUPINFOA;
{$EXTERNALSYM STARTUPINFOA}
TStartupInfoA = STARTUPINFOA;
PStartupInfoA = LPSTARTUPINFOA;

LPSTARTUPINFOW = ^STARTUPINFOW;
{$EXTERNALSYM LPSTARTUPINFOW}
_STARTUPINFOW = record
cb: DWORD;
lpReserved: LPWSTR;
lpDesktop: LPWSTR;
lpTitle: LPWSTR;
dwX: DWORD;
dwY: DWORD;
dwXSize: DWORD;
dwYSize: DWORD;
dwXCountChars: DWORD;
dwYCountChars: DWORD;
dwFillAttribute: DWORD;
dwFlags: DWORD;
wShowWindow: WORD;
cbReserved2: WORD;
lpReserved2: LPBYTE;
hStdInput: HANDLE;
hStdOutput: HANDLE;
hStdError: HANDLE;
end;
{$EXTERNALSYM _STARTUPINFOW}
STARTUPINFOW = _STARTUPINFOW;
{$EXTERNALSYM STARTUPINFOW}
TStartupInfoW = STARTUPINFOW;
PStartupInfoW = LPSTARTUPINFOW;

{$IFDEF UNICODE}
STARTUPINFO = STARTUPINFOW;
{$EXTERNALSYM STARTUPINFO}
LPSTARTUPINFO = LPSTARTUPINFOW;
{$EXTERNALSYM LPSTARTUPINFO}
TStartupInfo = TStartupInfoW;
PStartupInfo = PStartupInfoW;
{$ELSE}
STARTUPINFO = STARTUPINFOA;
{$EXTERNALSYM STARTUPINFO}
LPSTARTUPINFO = LPSTARTUPINFOA;
{$EXTERNALSYM LPSTARTUPINFO}
TStartupInfo = TStartupInfoA;
PStartupInfo = PStartupInfoA;
{$ENDIF}

const
SHUTDOWN_NORETRY = $00000001;
{$EXTERNALSYM SHUTDOWN_NORETRY}


type
PWIN32_FIND_DATAA = ^WIN32_FIND_DATAA;
{$EXTERNALSYM PWIN32_FIND_DATAA}
_WIN32_FIND_DATAA = record
dwFileAttributes: DWORD;
ftCreationTime: FILETIME;
ftLastAccessTime: FILETIME;
ftLastWriteTime: FILETIME;
nFileSizeHigh: DWORD;
nFileSizeLow: DWORD;
dwReserved0: DWORD;
dwReserved1: DWORD;
cFileName: array [0..MAX_PATH - 1] of CHAR;
cAlternateFileName: array [0..13] of CHAR;
end;
{$EXTERNALSYM _WIN32_FIND_DATAA}
WIN32_FIND_DATAA = _WIN32_FIND_DATAA;
{$EXTERNALSYM WIN32_FIND_DATAA}
LPWIN32_FIND_DATAA = ^WIN32_FIND_DATAA;
{$EXTERNALSYM LPWIN32_FIND_DATAA}
TWin32FindDataA = WIN32_FIND_DATAA;
PWin32FindDataA = PWIN32_FIND_DATAA;

PWIN32_FIND_DATAW = ^WIN32_FIND_DATAW;
{$EXTERNALSYM PWIN32_FIND_DATAW}
_WIN32_FIND_DATAW = record
dwFileAttributes: DWORD;
ftCreationTime: FILETIME;
ftLastAccessTime: FILETIME;
ftLastWriteTime: FILETIME;
nFileSizeHigh: DWORD;
nFileSizeLow: DWORD;
dwReserved0: DWORD;
dwReserved1: DWORD;
cFileName: array [0..MAX_PATH - 1] of WCHAR;
cAlternateFileName: array [0..13] of WCHAR;
end;
{$EXTERNALSYM _WIN32_FIND_DATAW}
WIN32_FIND_DATAW = _WIN32_FIND_DATAW;
{$EXTERNALSYM WIN32_FIND_DATAW}
LPWIN32_FIND_DATAW = ^WIN32_FIND_DATAW;
{$EXTERNALSYM LPWIN32_FIND_DATAW}
TWin32FindDataW = WIN32_FIND_DATAW;
PWin32FindDataW = PWIN32_FIND_DATAW;

{$IFDEF UNICODE}
WIN32_FIND_DATA = WIN32_FIND_DATAW;
{$EXTERNALSYM WIN32_FIND_DATA}
PWIN32_FIND_DATA = PWIN32_FIND_DATAW;
{$EXTERNALSYM PWIN32_FIND_DATA}
LPWIN32_FIND_DATA = LPWIN32_FIND_DATAW;
{$EXTERNALSYM LPWIN32_FIND_DATA}
TWin32FindData = TWin32FindDataW;
PWin32FindData = PWin32FindDataW;
{$ELSE}
WIN32_FIND_DATA = WIN32_FIND_DATAA;
{$EXTERNALSYM WIN32_FIND_DATA}
PWIN32_FIND_DATA = PWIN32_FIND_DATAA;
{$EXTERNALSYM PWIN32_FIND_DATA}
LPWIN32_FIND_DATA = LPWIN32_FIND_DATAA;


{$EXTERNALSYM LPWIN32_FIND_DATA}
TWin32FindData = TWin32FindDataA;
PWin32FindData = PWin32FindDataA;
{$ENDIF}

LPWIN32_FILE_ATTRIBUTE_DATA = ^WIN32_FILE_ATTRIBUTE_DATA;
{$EXTERNALSYM LPWIN32_FILE_ATTRIBUTE_DATA}
_WIN32_FILE_ATTRIBUTE_DATA = record
dwFileAttributes: DWORD;
ftCreationTime: FILETIME;
ftLastAccessTime: FILETIME;
ftLastWriteTime: FILETIME;
nFileSizeHigh: DWORD;
nFileSizeLow: DWORD;
end;
{$EXTERNALSYM _WIN32_FILE_ATTRIBUTE_DATA}
WIN32_FILE_ATTRIBUTE_DATA = _WIN32_FILE_ATTRIBUTE_DATA;
{$EXTERNALSYM WIN32_FILE_ATTRIBUTE_DATA}
TWin32FileAttributeData = WIN32_FILE_ATTRIBUTE_DATA;
PWin32FileAttributeData = LPWIN32_FILE_ATTRIBUTE_DATA;

function CreateMutexA(lpMutexAttributes: LPSECURITY_ATTRIBUTES; bInitialOwner: BOOL; lpName: LPCSTR): HANDLE;
{$EXTERNALSYM CreateMutexA}
function CreateMutexW(lpMutexAttributes: LPSECURITY_ATTRIBUTES; bInitialOwner: BOOL; lpName: LPCWSTR): HANDLE;
{$EXTERNALSYM CreateMutexW}

{$IFDEF UNICODE}
function CreateMutex(lpMutexAttributes: LPSECURITY_ATTRIBUTES;
bInitialOwner: BOOL; lpName: LPCWSTR): HANDLE;
{$EXTERNALSYM CreateMutex}
{$ELSE}
function CreateMutex(lpMutexAttributes: LPSECURITY_ATTRIBUTES;
bInitialOwner: BOOL; lpName: LPCSTR): HANDLE;
{$EXTERNALSYM CreateMutex}
{$ENDIF}

function OpenMutexA(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenMutexA}
function OpenMutexW(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenMutexW}

{$IFDEF UNICODE}
function OpenMutex(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenMutex}
{$ELSE}
function OpenMutex(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenMutex}
{$ENDIF}

function CreateEventA(lpEventAttributes: LPSECURITY_ATTRIBUTES;
bManualReset, bInitialState: BOOL; lpName: LPCSTR): HANDLE; stdcall;

{$EXTERNALSYM CreateEventA}
function CreateEventW(lpEventAttributes: LPSECURITY_ATTRIBUTES;
bManualReset, bInitialState: BOOL; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateEventW}

{$IFDEF UNICODE}
function CreateEvent(lpEventAttributes: LPSECURITY_ATTRIBUTES;
bManualReset, bInitialState: BOOL; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateEvent}
{$ELSE}
function CreateEvent(lpEventAttributes: LPSECURITY_ATTRIBUTES;
bManualReset, bInitialState: BOOL; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateEvent}
{$ENDIF}

function OpenEventA(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenEventA}
function OpenEventW(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenEventW}

{$IFDEF UNICODE}
function OpenEvent(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenEvent}
{$ELSE}


function OpenEvent(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenEvent}
{$ENDIF}

function CreateSemaphoreA(lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES;
lInitialCount, lMaximumCount: LONG; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateSemaphoreA}
function CreateSemaphoreW(lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES;
lInitialCount, lMaximumCount: LONG; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateSemaphoreW}

{$IFDEF UNICODE}
function CreateSemaphore(lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES;
lInitialCount, lMaximumCount: LONG; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateSemaphore}
{$ELSE}
function CreateSemaphore(lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES;
lInitialCount, lMaximumCount: LONG; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateSemaphore}
{$ENDIF}

function OpenSemaphoreA(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpName: LPCSTR): HANDLE; stdcall;

{$EXTERNALSYM OpenSemaphoreA}
function OpenSemaphoreW(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenSemaphoreW}

{$IFDEF UNICODE}
function OpenSemaphore(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenSemaphore}
{$ELSE}
function OpenSemaphore(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenSemaphore}
{$ENDIF}

type
PTIMERAPCROUTINE = procedure (lpArgToCompletionRoutine: LPVOID;
dwTimerLowValue, dwTimerHighValue: DWORD); stdcall;
{$EXTERNALSYM PTIMERAPCROUTINE}
TTimerApcRoutine = PTIMERAPCROUTINE;

function CreateWaitableTimerA(lpTimerAttributes: LPSECURITY_ATTRIBUTES;
bManualReset: BOOL; lpTimerName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateWaitableTimerA}
function CreateWaitableTimerW(lpTimerAttributes: LPSECURITY_ATTRIBUTES;
bManualReset: BOOL; lpTimerName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateWaitableTimerW}

{$IFDEF UNICODE}
function CreateWaitableTimer(lpTimerAttributes: LPSECURITY_ATTRIBUTES;
bManualReset: BOOL; lpTimerName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateWaitableTimer}
{$ELSE}
function CreateWaitableTimer(lpTimerAttributes: LPSECURITY_ATTRIBUTES;
bManualReset: BOOL; lpTimerName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateWaitableTimer}
{$ENDIF}

function OpenWaitableTimerA(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpTimerName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenWaitableTimerA}
function OpenWaitableTimerW(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpTimerName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenWaitableTimerW}

{$IFDEF UNICODE}
function OpenWaitableTimer(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpTimerName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenWaitableTimer}
{$ELSE}
function OpenWaitableTimer(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpTimerName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenWaitableTimer}
{$ENDIF}

function SetWaitableTimer(hTimer: HANDLE; var lpDueTime: LARGE_INTEGER;
lPeriod: LONG; pfnCompletionRoutine: PTIMERAPCROUTINE;
lpArgToCompletionRoutine: LPVOID; fResume: BOOL): BOOL; stdcall;
{$EXTERNALSYM SetWaitableTimer}

function CancelWaitableTimer(hTimer: HANDLE): BOOL; stdcall;
{$EXTERNALSYM CancelWaitableTimer}

function CreateFileMappingA(hFile: HANDLE; lpFileMappingAttributes: LPSECURITY_ATTRIBUTES;
flProtect, dwMaximumSizeHigh, dwMaximumSizeLow: DWORD; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateFileMappingA}
function CreateFileMappingW(hFile: HANDLE; lpFileMappingAttributes: LPSECURITY_ATTRIBUTES;
flProtect, dwMaximumSizeHigh, dwMaximumSizeLow: DWORD; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateFileMappingW}

{$IFDEF UNICODE}
function CreateFileMapping(hFile: HANDLE; lpFileMappingAttributes: LPSECURITY_ATTRIBUTES;
flProtect, dwMaximumSizeHigh, dwMaximumSizeLow: DWORD; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateFileMapping}
{$ELSE}
function CreateFileMapping(hFile: HANDLE; lpFileMappingAttributes: LPSECURITY_ATTRIBUTES;
flProtect, dwMaximumSizeHigh, dwMaximumSizeLow: DWORD; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateFileMapping}
{$ENDIF}

function OpenFileMappingA(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenFileMappingA}
function OpenFileMappingW(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenFileMappingW}

{$IFDEF UNICODE}
function OpenFileMapping(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenFileMapping}
{$ELSE}
function OpenFileMapping(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenFileMapping}
{$ENDIF}

function GetLogicalDriveStringsA(nBufferLength: DWORD; lpBuffer: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetLogicalDriveStringsA}
function GetLogicalDriveStringsW(nBufferLength: DWORD; lpBuffer: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetLogicalDriveStringsW}

{$IFDEF UNICODE}
function GetLogicalDriveStrings(nBufferLength: DWORD; lpBuffer: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetLogicalDriveStrings}
{$ELSE}
function GetLogicalDriveStrings(nBufferLength: DWORD; lpBuffer: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetLogicalDriveStrings}
{$ENDIF}

type
_MEMORY_RESOURCE_NOTIFICATION_TYPE = (
LowMemoryResourceNotification,
HighMemoryResourceNotification);
{$EXTERNALSYM _MEMORY_RESOURCE_NOTIFICATION_TYPE}
MEMORY_RESOURCE_NOTIFICATION_TYPE = _MEMORY_RESOURCE_NOTIFICATION_TYPE;
{$EXTERNALSYM MEMORY_RESOURCE_NOTIFICATION_TYPE}
TMemoryResourceNotification = MEMORY_RESOURCE_NOTIFICATION_TYPE;

function CreateMemoryResourceNotification(NotificationType: MEMORY_RESOURCE_NOTIFICATION_TYPE): HANDLE; stdcall;
{$EXTERNALSYM CreateMemoryResourceNotification}

function QueryMemoryResourceNotification(ResourceNotificationHandle: HANDLE;

ResourceState: BOOL): BOOL; stdcall;
{$EXTERNALSYM QueryMemoryResourceNotification}

function LoadLibraryA(lpLibFileName: LPCSTR): HMODULE; stdcall;
{$EXTERNALSYM LoadLibraryA}
function LoadLibraryW(lpLibFileName: LPCWSTR): HMODULE; stdcall;
{$EXTERNALSYM LoadLibraryW}

{$IFDEF UNICODE}
function LoadLibrary(lpLibFileName: LPCWSTR): HMODULE; stdcall;
{$EXTERNALSYM LoadLibrary}
{$ELSE}
function LoadLibrary(lpLibFileName: LPCSTR): HMODULE; stdcall;
{$EXTERNALSYM LoadLibrary}
{$ENDIF}

function LoadLibraryExA(lpLibFileName: LPCSTR; hFile: HANDLE; dwFlags: DWORD): HMODULE; stdcall;
{$EXTERNALSYM LoadLibraryExA}
function LoadLibraryExW(lpLibFileName: LPCWSTR; hFile: HANDLE; dwFlags: DWORD): HMODULE; stdcall;
{$EXTERNALSYM LoadLibraryExW}

{$IFDEF UNICODE}
function LoadLibraryEx(lpLibFileName: LPCWSTR; hFile: HANDLE; dwFlags: DWORD): HMODULE; stdcall;
{$EXTERNALSYM LoadLibraryEx}
{$ELSE}
function LoadLibraryEx(lpLibFileName: LPCSTR; hFile: HANDLE; dwFlags: DWORD): HMODULE; stdcall;

{$EXTERNALSYM LoadLibraryEx}
{$ENDIF}

const
DONT_RESOLVE_DLL_REFERENCES = $00000001;
{$EXTERNALSYM DONT_RESOLVE_DLL_REFERENCES}
LOAD_LIBRARY_AS_DATAFILE = $00000002;
{$EXTERNALSYM LOAD_LIBRARY_AS_DATAFILE}
LOAD_WITH_ALTERED_SEARCH_PATH = $00000008;
{$EXTERNALSYM LOAD_WITH_ALTERED_SEARCH_PATH}
LOAD_IGNORE_CODE_AUTHZ_LEVEL = $00000010;
{$EXTERNALSYM LOAD_IGNORE_CODE_AUTHZ_LEVEL}

function GetModuleFileNameA(hModule: HMODULE; lpFilename: LPSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetModuleFileNameA}
function GetModuleFileNameW(hModule: HMODULE; lpFilename: LPWSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetModuleFileNameW}

{$IFDEF UNICODE}
function GetModuleFileName(hModule: HMODULE; lpFilename: LPWSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetModuleFileName}
{$ELSE}
function GetModuleFileName(hModule: HMODULE; lpFilename: LPSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetModuleFileName}
{$ENDIF}

function GetModuleHandleA(lpModuleName: LPCSTR): HMODULE; stdcall;
{$EXTERNALSYM GetModuleHandleA}
function GetModuleHandleW(lpModuleName: LPCWSTR): HMODULE; stdcall;
{$EXTERNALSYM GetModuleHandleW}

{$IFDEF UNICODE}
function GetModuleHandle(lpModuleName: LPCWSTR): HMODULE; stdcall;
{$EXTERNALSYM GetModuleHandle}
{$ELSE}
function GetModuleHandle(lpModuleName: LPCSTR): HMODULE; stdcall;
{$EXTERNALSYM GetModuleHandle}
{$ENDIF}

const
GET_MODULE_HANDLE_EX_FLAG_PIN = ($00000001);
{$EXTERNALSYM GET_MODULE_HANDLE_EX_FLAG_PIN}
GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = ($00000002);
{$EXTERNALSYM GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT}
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = ($00000004);
{$EXTERNALSYM GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS}

type
PGET_MODULE_HANDLE_EXA = function (dwFlags: DWORD; lpModuleName: LPCSTR; var phModule: HMODULE): BOOL; stdcall;
{$EXTERNALSYM PGET_MODULE_HANDLE_EXA}
PGET_MODULE_HANDLE_EXW = function (dwFlags: DWORD; lpModuleName: LPCWSTR; var phModule: HMODULE): BOOL; stdcall;
{$EXTERNALSYM PGET_MODULE_HANDLE_EXW}

{$IFDEF UNICODE}
PGET_MODULE_HANDLE_EX = PGET_MODULE_HANDLE_EXW;
{$EXTERNALSYM PGET_MODULE_HANDLE_EX}
{$ELSE}
PGET_MODULE_HANDLE_EX = PGET_MODULE_HANDLE_EXA;
{$EXTERNALSYM PGET_MODULE_HANDLE_EX}
{$ENDIF}

function GetModuleHandleExA(dwFlags: DWORD; lpModuleName: LPCSTR; var phModule: HMODULE): BOOL; stdcall;
{$EXTERNALSYM GetModuleHandleExA}
function GetModuleHandleExW(dwFlags: DWORD; lpModuleName: LPCWSTR; var phModule: HMODULE): BOOL; stdcall;
{$EXTERNALSYM GetModuleHandleExW}

{$IFDEF UNICODE}
function GetModuleHandleEx(dwFlags: DWORD; lpModuleName: LPCWSTR; var phModule: HMODULE): BOOL; stdcall;
{$EXTERNALSYM GetModuleHandleEx}
{$ELSE}
function GetModuleHandleEx(dwFlags: DWORD; lpModuleName: LPCSTR; var phModule: HMODULE): BOOL; stdcall;
{$EXTERNALSYM GetModuleHandleEx}
{$ENDIF}

function CreateProcessA(lpApplicationName: LPCSTR; lpCommandLine: LPSTR;
lpProcessAttributes, lpThreadAttributes: LPSECURITY_ATTRIBUTES;
bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: LPVOID;
lpCurrentDirectory: LPCSTR; const lpStartupInfo: STARTUPINFOA;
var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM CreateProcessA}
function CreateProcessW(lpApplicationName: LPCWSTR; lpCommandLine: LPWSTR;
lpProcessAttributes, lpThreadAttributes: LPSECURITY_ATTRIBUTES;
bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: LPVOID;
lpCurrentDirectory: LPCWSTR; const lpStartupInfo: STARTUPINFOW;
var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM CreateProcessW}

{$IFDEF UNICODE}
function CreateProcess(lpApplicationName: LPCWSTR; lpCommandLine: LPWSTR;
lpProcessAttributes, lpThreadAttributes: LPSECURITY_ATTRIBUTES;
bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: LPVOID;
lpCurrentDirectory: LPCWSTR; const lpStartupInfo: STARTUPINFOW;
var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM CreateProcess}


{$ELSE}
function CreateProcess(lpApplicationName: LPCSTR; lpCommandLine: LPSTR;
lpProcessAttributes, lpThreadAttributes: LPSECURITY_ATTRIBUTES;
bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: LPVOID;
lpCurrentDirectory: LPCSTR; const lpStartupInfo: STARTUPINFOA;
var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM CreateProcess}
{$ENDIF}

function SetProcessShutdownParameters(dwLevel, dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetProcessShutdownParameters}

function GetProcessShutdownParameters(var lpdwLevel, lpdwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetProcessShutdownParameters}

function GetProcessVersion(ProcessId: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetProcessVersion}

procedure FatalAppExitA(uAction: UINT; lpMessageText: LPCSTR); stdcall;
{$EXTERNALSYM FatalAppExitA}
procedure FatalAppExitW(uAction: UINT; lpMessageText: LPCWSTR); stdcall;
{$EXTERNALSYM FatalAppExitW}

{$IFDEF UNICODE}


procedure FatalAppExit(uAction: UINT; lpMessageText: LPCWSTR); stdcall;
{$EXTERNALSYM FatalAppExit}
{$ELSE}
procedure FatalAppExit(uAction: UINT; lpMessageText: LPCSTR); stdcall;
{$EXTERNALSYM FatalAppExit}
{$ENDIF}

procedure GetStartupInfoA(var lpStartupInfo: STARTUPINFOA); stdcall;
{$EXTERNALSYM GetStartupInfoA}
procedure GetStartupInfoW(var lpStartupInfo: STARTUPINFOW); stdcall;
{$EXTERNALSYM GetStartupInfoW}

{$IFDEF UNICODE}
procedure GetStartupInfo(var lpStartupInfo: STARTUPINFOW); stdcall;
{$EXTERNALSYM GetStartupInfo}
{$ELSE}
procedure GetStartupInfo(var lpStartupInfo: STARTUPINFOA); stdcall;
{$EXTERNALSYM GetStartupInfo}
{$ENDIF}

function GetCommandLineA: LPSTR; stdcall;
{$EXTERNALSYM GetCommandLineA}
function GetCommandLineW: LPWSTR; stdcall;
{$EXTERNALSYM GetCommandLineW}

{$IFDEF UNICODE}
function GetCommandLine: LPWSTR; stdcall;
{$EXTERNALSYM GetCommandLine}
{$ELSE}
function GetCommandLine: LPSTR; stdcall;
{$EXTERNALSYM GetCommandLine}
{$ENDIF}

function GetEnvironmentVariableA(lpName: LPCSTR; lpBuffer: LPSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetEnvironmentVariableA}
function GetEnvironmentVariableW(lpName: LPCWSTR; lpBuffer: LPWSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetEnvironmentVariableW}

{$IFDEF UNICODE}
function GetEnvironmentVariable(lpName: LPCWSTR; lpBuffer: LPWSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetEnvironmentVariable}
{$ELSE}
function GetEnvironmentVariable(lpName: LPCSTR; lpBuffer: LPSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetEnvironmentVariable}
{$ENDIF}

function SetEnvironmentVariableA(lpName, lpValue: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetEnvironmentVariableA}
function SetEnvironmentVariableW(lpName, lpValue: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetEnvironmentVariableW}

{$IFDEF UNICODE}
function SetEnvironmentVariable(lpName, lpValue: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetEnvironmentVariable}
{$ELSE}
function SetEnvironmentVariable(lpName, lpValue: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetEnvironmentVariable}
{$ENDIF}

function ExpandEnvironmentStringsA(lpSrc: LPCSTR; lpDst: LPSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM ExpandEnvironmentStringsA}
function ExpandEnvironmentStringsW(lpSrc: LPCWSTR; lpDst: LPWSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM ExpandEnvironmentStringsW}

{$IFDEF UNICODE}
function ExpandEnvironmentStrings(lpSrc: LPCWSTR; lpDst: LPWSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM ExpandEnvironmentStrings}
{$ELSE}
function ExpandEnvironmentStrings(lpSrc: LPCSTR; lpDst: LPSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM ExpandEnvironmentStrings}
{$ENDIF}

function GetFirmwareEnvironmentVariableA(lpName, lpGuid: LPCSTR; pBuffer: PVOID;
nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetFirmwareEnvironmentVariableA}
function GetFirmwareEnvironmentVariableW(lpName, lpGuid: LPCWSTR; pBuffer: PVOID;
nSize: DWORD): DWORD; stdcall;

{$EXTERNALSYM GetFirmwareEnvironmentVariableW}

{$IFDEF UNICODE}
function GetFirmwareEnvironmentVariable(lpName, lpGuid: LPCWSTR; pBuffer: PVOID;
nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetFirmwareEnvironmentVariable}
{$ELSE}
function GetFirmwareEnvironmentVariable(lpName, lpGuid: LPCSTR; pBuffer: PVOID;
nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetFirmwareEnvironmentVariable}
{$ENDIF}

function SetFirmwareEnvironmentVariableA(lpName, lpGuid: LPCSTR; pValue: PVOID;
nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetFirmwareEnvironmentVariableA}
function SetFirmwareEnvironmentVariableW(lpName, lpGuid: LPCWSTR; pValue: PVOID;
nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetFirmwareEnvironmentVariableW}

{$IFDEF UNICODE}
function SetFirmwareEnvironmentVariable(lpName, lpGuid: LPCWSTR; pValue: PVOID;
nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetFirmwareEnvironmentVariable}
{$ELSE}
function SetFirmwareEnvironmentVariable(lpName, lpGuid: LPCSTR; pValue: PVOID;
nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetFirmwareEnvironmentVariable}
{$ENDIF}

procedure OutputDebugStringA(lpOutputString: LPCSTR); stdcall;
{$EXTERNALSYM OutputDebugStringA}
procedure OutputDebugStringW(lpOutputString: LPCWSTR); stdcall;
{$EXTERNALSYM OutputDebugStringW}

{$IFDEF UNICODE}
procedure OutputDebugString(lpOutputString: LPCWSTR); stdcall;
{$EXTERNALSYM OutputDebugString}
{$ELSE}
procedure OutputDebugString(lpOutputString: LPCSTR); stdcall;
{$EXTERNALSYM OutputDebugString}
{$ENDIF}

function FindResourceA(hModule: HMODULE; lpName, lpType: LPCSTR): HRSRC; stdcall;
{$EXTERNALSYM FindResourceA}
function FindResourceW(hModule: HMODULE; lpName, lpType: LPCWSTR): HRSRC; stdcall;
{$EXTERNALSYM FindResourceW}

{$IFDEF UNICODE}
function FindResource(hModule: HMODULE; lpName, lpType: LPCWSTR): HRSRC; stdcall;
{$EXTERNALSYM FindResource}
{$ELSE}
function FindResource(hModule: HMODULE; lpName, lpType: LPCSTR): HRSRC; stdcall;
{$EXTERNALSYM FindResource}
{$ENDIF}

function FindResourceExA(hModule: HMODULE; lpType, lpName: LPCSTR; wLanguage: WORD): HRSRC; stdcall;
{$EXTERNALSYM FindResourceExA}
function FindResourceExW(hModule: HMODULE; lpType, lpName: LPCWSTR; wLanguage: WORD): HRSRC; stdcall;
{$EXTERNALSYM FindResourceExW}

{$IFDEF UNICODE}
function FindResourceEx(hModule: HMODULE; lpType, lpName: LPCWSTR; wLanguage: WORD): HRSRC; stdcall;
{$EXTERNALSYM FindResourceEx}
{$ELSE}
function FindResourceEx(hModule: HMODULE; lpType, lpName: LPCSTR; wLanguage: WORD): HRSRC; stdcall;
{$EXTERNALSYM FindResourceEx}
{$ENDIF}

type
ENUMRESTYPEPROCA = function (hModule: HMODULE; lpType: LPSTR; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESTYPEPROCA}
ENUMRESTYPEPROCW = function (hModule: HMODULE; lpType: LPWSTR; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESTYPEPROCW}
TEnumResTypeProcA = ENUMRESTYPEPROCA;
TEnumResTypeProcW = ENUMRESTYPEPROCW;

{$IFDEF UNICODE}


ENUMRESTYPEPROC = function (hModule: HMODULE; lpType: LPWSTR; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESTYPEPROC}
TEnumResTypeProc = ENUMRESTYPEPROCW;
{$ELSE}
ENUMRESTYPEPROC = function (hModule: HMODULE; lpType: LPSTR; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESTYPEPROC}
TEnumResTypeProc = ENUMRESTYPEPROCA;
{$ENDIF}

ENUMRESNAMEPROCA = function (hModule: HMODULE; lpType: LPCSTR; lpName: LPSTR;
lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESNAMEPROCA}
ENUMRESNAMEPROCW = function (hModule: HMODULE; lpType: LPCWSTR; lpName: LPWSTR;
lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESNAMEPROCW}
TEnumResNameProcA = ENUMRESNAMEPROCA;
TEnumResNameProcW = ENUMRESNAMEPROCW;

{$IFDEF UNICODE}
ENUMRESNAMEPROC = function (hModule: HMODULE; lpType: LPCWSTR; lpName: LPWSTR;
lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESNAMEPROC}
TEnumResNameProc = ENUMRESNAMEPROCW;
{$ELSE}
ENUMRESNAMEPROC = function (hModule: HMODULE; lpType: LPCSTR; lpName: LPSTR;
lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESNAMEPROC}
TEnumResNameProc = ENUMRESNAMEPROCA;
{$ENDIF}

ENUMRESLANGPROCA = function (hModule: HMODULE; lpType, lpName: LPCSTR;
wLanguage: WORD; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESLANGPROCA}
ENUMRESLANGPROCW = function (hModule: HMODULE; lpType, lpName: LPCWSTR;
wLanguage: WORD; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESLANGPROCW}
TEnumResLangProcA = ENUMRESLANGPROCA;
TEnumResLangProcW = ENUMRESLANGPROCW;

{$IFDEF UNICODE}
ENUMRESLANGPROC = function (hModule: HMODULE; lpType, lpName: LPCWSTR;
wLanguage: WORD; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ENUMRESLANGPROC}
TEnumResLangProc = ENUMRESLANGPROCW;
{$ELSE}
ENUMRESLANGPROC = function (hModule: HMODULE; lpType, lpName: LPCSTR;
wLanguage: WORD; lParam: LONG_PTR): BOOL; stdcall;

{$EXTERNALSYM ENUMRESLANGPROC}
TEnumResLangProc = ENUMRESLANGPROCA;
{$ENDIF}

function EnumResourceTypesA(hModule: HMODULE; lpEnumFunc: ENUMRESTYPEPROCA;
lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceTypesA}
function EnumResourceTypesW(hModule: HMODULE; lpEnumFunc: ENUMRESTYPEPROCW;
lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceTypesW}

{$IFDEF UNICODE}
function EnumResourceTypes(hModule: HMODULE; lpEnumFunc: ENUMRESTYPEPROCW;
lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceTypes}
{$ELSE}
function EnumResourceTypes(hModule: HMODULE; lpEnumFunc: ENUMRESTYPEPROCA;
lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceTypes}
{$ENDIF}

function EnumResourceNamesA(hModule: HMODULE; lpType: LPCSTR;
lpEnumFunc: ENUMRESNAMEPROCA; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceNamesA}
function EnumResourceNamesW(hModule: HMODULE; lpType: LPCWSTR;
lpEnumFunc: ENUMRESNAMEPROCW; lParam: LONG_PTR): BOOL; stdcall;

{$EXTERNALSYM EnumResourceNamesW}

{$IFDEF UNICODE}
function EnumResourceNames(hModule: HMODULE; lpType: LPCWSTR;
lpEnumFunc: ENUMRESNAMEPROCW; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceNames}
{$ELSE}
function EnumResourceNames(hModule: HMODULE; lpType: LPCSTR;
lpEnumFunc: ENUMRESNAMEPROCA; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceNames}
{$ENDIF}

function EnumResourceLanguagesA(hModule: HMODULE; lpType, lpName: LPCSTR;
lpEnumFunc: ENUMRESLANGPROCA; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceLanguagesA}
function EnumResourceLanguagesW(hModule: HMODULE; lpType, lpName: LPCWSTR;
lpEnumFunc: ENUMRESLANGPROCW; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceLanguagesW}

{$IFDEF UNICODE}
function EnumResourceLanguages(hModule: HMODULE; lpType, lpName: LPCWSTR;
lpEnumFunc: ENUMRESLANGPROCW; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceLanguages}
{$ELSE}
function EnumResourceLanguages(hModule: HMODULE; lpType, lpName: LPCSTR;
lpEnumFunc: ENUMRESLANGPROCA; lParam: LONG_PTR): BOOL; stdcall;
{$EXTERNALSYM EnumResourceLanguages}
{$ENDIF}

function BeginUpdateResourceA(pFileName: LPCSTR; bDeleteExistingResources: BOOL): HANDLE; stdcall;
{$EXTERNALSYM BeginUpdateResourceA}
function BeginUpdateResourceW(pFileName: LPCWSTR; bDeleteExistingResources: BOOL): HANDLE; stdcall;
{$EXTERNALSYM BeginUpdateResourceW}

{$IFDEF UNICODE}
function BeginUpdateResource(pFileName: LPCWSTR; bDeleteExistingResources: BOOL): HANDLE; stdcall;
{$EXTERNALSYM BeginUpdateResource}
{$ELSE}
function BeginUpdateResource(pFileName: LPCSTR; bDeleteExistingResources: BOOL): HANDLE; stdcall;
{$EXTERNALSYM BeginUpdateResource}
{$ENDIF}

function UpdateResourceA(hUpdate: HANDLE; lpType, lpName: LPCSTR;
wLanguage: WORD; lpData: LPVOID; cbData: DWORD): BOOL; stdcall;
{$EXTERNALSYM UpdateResourceA}
function UpdateResourceW(hUpdate: HANDLE; lpType, lpName: LPCWSTR;
wLanguage: WORD; lpData: LPVOID; cbData: DWORD): BOOL; stdcall;

{$EXTERNALSYM UpdateResourceW}

{$IFDEF UNICODE}
function UpdateResource(hUpdate: HANDLE; lpType, lpName: LPCWSTR;
wLanguage: WORD; lpData: LPVOID; cbData: DWORD): BOOL; stdcall;
{$EXTERNALSYM UpdateResource}
{$ELSE}
function UpdateResource(hUpdate: HANDLE; lpType, lpName: LPCSTR;
wLanguage: WORD; lpData: LPVOID; cbData: DWORD): BOOL; stdcall;
{$EXTERNALSYM UpdateResource}
{$ENDIF}

function EndUpdateResourceA(hUpdate: HANDLE; fDiscard: BOOL): BOOL; stdcall;
{$EXTERNALSYM EndUpdateResourceA}
function EndUpdateResourceW(hUpdate: HANDLE; fDiscard: BOOL): BOOL; stdcall;
{$EXTERNALSYM EndUpdateResourceW}

{$IFDEF UNICODE}
function EndUpdateResource(hUpdate: HANDLE; fDiscard: BOOL): BOOL; stdcall;
{$EXTERNALSYM EndUpdateResource}
{$ELSE}
function EndUpdateResource(hUpdate: HANDLE; fDiscard: BOOL): BOOL; stdcall;
{$EXTERNALSYM EndUpdateResource}
{$ENDIF}

function GlobalAddAtomA(lpString: LPCSTR): ATOM; stdcall;
{$EXTERNALSYM GlobalAddAtomA}
function GlobalAddAtomW(lpString: LPCWSTR): ATOM; stdcall;
{$EXTERNALSYM GlobalAddAtomW}

{$IFDEF UNICODE}
function GlobalAddAtom(lpString: LPCWSTR): ATOM; stdcall;
{$EXTERNALSYM GlobalAddAtom}
{$ELSE}
function GlobalAddAtom(lpString: LPCSTR): ATOM; stdcall;
{$EXTERNALSYM GlobalAddAtom}
{$ENDIF}

function GlobalFindAtomA(lpString: LPCSTR): ATOM; stdcall;
{$EXTERNALSYM GlobalFindAtomA}
function GlobalFindAtomW(lpString: LPCWSTR): ATOM; stdcall;
{$EXTERNALSYM GlobalFindAtomW}

{$IFDEF UNICODE}
function GlobalFindAtom(lpString: LPCWSTR): ATOM; stdcall;
{$EXTERNALSYM GlobalFindAtom}
{$ELSE}
function GlobalFindAtom(lpString: LPCSTR): ATOM; stdcall;
{$EXTERNALSYM GlobalFindAtom}
{$ENDIF}

function GlobalGetAtomNameA(nAtom: ATOM; lpBuffer: LPSTR; nSize: Integer): UINT; stdcall;
{$EXTERNALSYM GlobalGetAtomNameA}
function GlobalGetAtomNameW(nAtom: ATOM; lpBuffer: LPWSTR; nSize: Integer): UINT; stdcall;
{$EXTERNALSYM GlobalGetAtomNameW}

{$IFDEF UNICODE}
function GlobalGetAtomName(nAtom: ATOM; lpBuffer: LPWSTR; nSize: Integer): UINT; stdcall;
{$EXTERNALSYM GlobalGetAtomName}
{$ELSE}
function GlobalGetAtomName(nAtom: ATOM; lpBuffer: LPSTR; nSize: Integer): UINT; stdcall;
{$EXTERNALSYM GlobalGetAtomName}
{$ENDIF}

function AddAtomA(lpString: LPCSTR): ATOM; stdcall;
{$EXTERNALSYM AddAtomA}
function AddAtomW(lpString: LPCWSTR): ATOM; stdcall;
{$EXTERNALSYM AddAtomW}

{$IFDEF UNICODE}
function AddAtom(lpString: LPCWSTR): ATOM; stdcall;
{$EXTERNALSYM AddAtom}
{$ELSE}
function AddAtom(lpString: LPCSTR): ATOM; stdcall;
{$EXTERNALSYM AddAtom}
{$ENDIF}

function FindAtomA(lpString: LPCSTR): ATOM; stdcall;
{$EXTERNALSYM FindAtomA}
function FindAtomW(lpString: LPCWSTR): ATOM; stdcall;
{$EXTERNALSYM FindAtomW}

{$IFDEF UNICODE}
function FindAtom(lpString: LPCWSTR): ATOM; stdcall;
{$EXTERNALSYM FindAtom}
{$ELSE}
function FindAtom(lpString: LPCSTR): ATOM; stdcall;


{$EXTERNALSYM FindAtom}
{$ENDIF}

function GetAtomNameA(nAtom: ATOM; lpBuffer: LPSTR; nSize: Integer): UINT; stdcall;
{$EXTERNALSYM GetAtomNameA}
function GetAtomNameW(nAtom: ATOM; lpBuffer: LPWSTR; nSize: Integer): UINT; stdcall;
{$EXTERNALSYM GetAtomNameW}

{$IFDEF UNICODE}
function GetAtomName(nAtom: ATOM; lpBuffer: LPWSTR; nSize: Integer): UINT; stdcall;
{$EXTERNALSYM GetAtomName}
{$ELSE}
function GetAtomName(nAtom: ATOM; lpBuffer: LPSTR; nSize: Integer): UINT; stdcall;
{$EXTERNALSYM GetAtomName}
{$ENDIF}

function GetProfileIntA(lpAppName, lpKeyName: LPCSTR; nDefault: Integer): UINT; stdcall;
{$EXTERNALSYM GetProfileIntA}
function GetProfileIntW(lpAppName, lpKeyName: LPCWSTR; nDefault: Integer): UINT; stdcall;
{$EXTERNALSYM GetProfileIntW}

{$IFDEF UNICODE}
function GetProfileInt(lpAppName, lpKeyName: LPCWSTR; nDefault: Integer): UINT; stdcall;
{$EXTERNALSYM GetProfileInt}
{$ELSE}
function GetProfileInt(lpAppName, lpKeyName: LPCSTR; nDefault: Integer): UINT; stdcall;
{$EXTERNALSYM GetProfileInt}
{$ENDIF}

function GetProfileStringA(lpAppName, lpKeyName, lpDefault: LPCSTR;
lpReturnedString: LPSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetProfileStringA}
function GetProfileStringW(lpAppName, lpKeyName, lpDefault: LPCWSTR;
lpReturnedString: LPWSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetProfileStringW}

{$IFDEF UNICODE}
function GetProfileString(lpAppName, lpKeyName, lpDefault: LPCWSTR;
lpReturnedString: LPWSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetProfileString}
{$ELSE}
function GetProfileString(lpAppName, lpKeyName, lpDefault: LPCSTR;
lpReturnedString: LPSTR; nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetProfileString}
{$ENDIF}

function WriteProfileStringA(lpAppName, lpKeyName, lpString: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM WriteProfileStringA}
function WriteProfileStringW(lpAppName, lpKeyName, lpString: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WriteProfileStringW}

{$IFDEF UNICODE}
function WriteProfileString(lpAppName, lpKeyName, lpString: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WriteProfileString}
{$ELSE}
function WriteProfileString(lpAppName, lpKeyName, lpString: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM WriteProfileString}
{$ENDIF}

function GetProfileSectionA(lpAppName: LPCSTR; lpReturnedString: LPSTR;
nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetProfileSectionA}
function GetProfileSectionW(lpAppName: LPCWSTR; lpReturnedString: LPWSTR;
nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetProfileSectionW}

{$IFDEF UNICODE}
function GetProfileSection(lpAppName: LPCWSTR; lpReturnedString: LPWSTR;
nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetProfileSection}
{$ELSE}
function GetProfileSection(lpAppName: LPCSTR; lpReturnedString: LPSTR;
nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetProfileSection}
{$ENDIF}

function WriteProfileSectionA(lpAppName, lpString: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM WriteProfileSectionA}
function WriteProfileSectionW(lpAppName, lpString: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WriteProfileSectionW}

{$IFDEF UNICODE}
function WriteProfileSection(lpAppName, lpString: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WriteProfileSection}
{$ELSE}
function WriteProfileSection(lpAppName, lpString: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM WriteProfileSection}
{$ENDIF}

function GetPrivateProfileIntA(lpAppName, lpKeyName: LPCSTR; nDefault: Integer;
lpFileName: LPCSTR): UINT; stdcall;
{$EXTERNALSYM GetPrivateProfileIntA}
function GetPrivateProfileIntW(lpAppName, lpKeyName: LPCWSTR; nDefault: Integer;
lpFileName: LPCWSTR): UINT; stdcall;
{$EXTERNALSYM GetPrivateProfileIntW}

{$IFDEF UNICODE}
function GetPrivateProfileInt(lpAppName, lpKeyName: LPCWSTR; nDefault: Integer;
lpFileName: LPCWSTR): UINT; stdcall;
{$EXTERNALSYM GetPrivateProfileInt}
{$ELSE}
function GetPrivateProfileInt(lpAppName, lpKeyName: LPCSTR; nDefault: Integer;
lpFileName: LPCSTR): UINT; stdcall;

{$EXTERNALSYM GetPrivateProfileInt}
{$ENDIF}

function GetPrivateProfileStringA(lpAppName, lpKeyName, lpDefault: LPCSTR;
lpReturnedString: LPSTR; nSize: DWORD; lpFileName: LPCSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileStringA}
function GetPrivateProfileStringW(lpAppName, lpKeyName, lpDefault: LPCWSTR;
lpReturnedString: LPWSTR; nSize: DWORD; lpFileName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileStringW}

{$IFDEF UNICODE}
function GetPrivateProfileString(lpAppName, lpKeyName, lpDefault: LPCWSTR;
lpReturnedString: LPWSTR; nSize: DWORD; lpFileName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileString}
{$ELSE}
function GetPrivateProfileString(lpAppName, lpKeyName, lpDefault: LPCSTR;
lpReturnedString: LPSTR; nSize: DWORD; lpFileName: LPCSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileString}
{$ENDIF}

function WritePrivateProfileStringA(lpAppName, lpKeyName, lpString,
lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileStringA}
function WritePrivateProfileStringW(lpAppName, lpKeyName, lpString,
lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileStringW}

{$IFDEF UNICODE}
function WritePrivateProfileString(lpAppName, lpKeyName, lpString,
lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileString}
{$ELSE}
function WritePrivateProfileString(lpAppName, lpKeyName, lpString,
lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileString}
{$ENDIF}

function GetPrivateProfileSectionA(lpAppName: LPCSTR; lpReturnedString: LPSTR;
nSize: DWORD; lpFileName: LPCSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileSectionA}
function GetPrivateProfileSectionW(lpAppName: LPCWSTR; lpReturnedString: LPWSTR;
nSize: DWORD; lpFileName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileSectionW}

{$IFDEF UNICODE}
function GetPrivateProfileSection(lpAppName: LPCWSTR; lpReturnedString: LPWSTR;
nSize: DWORD; lpFileName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileSection}
{$ELSE}
function GetPrivateProfileSection(lpAppName: LPCSTR; lpReturnedString: LPSTR;
nSize: DWORD; lpFileName: LPCSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileSection}
{$ENDIF}

function WritePrivateProfileSectionA(lpAppName, lpString, lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileSectionA}
function WritePrivateProfileSectionW(lpAppName, lpString, lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileSectionW}

{$IFDEF UNICODE}
function WritePrivateProfileSection(lpAppName, lpString, lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileSection}
{$ELSE}
function WritePrivateProfileSection(lpAppName, lpString, lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileSection}
{$ENDIF}

function GetPrivateProfileSectionNamesA(lpszReturnBuffer: LPSTR; nSize: DWORD;
lpFileName: LPCSTR): DWORD; stdcall;


{$EXTERNALSYM GetPrivateProfileSectionNamesA}
function GetPrivateProfileSectionNamesW(lpszReturnBuffer: LPWSTR; nSize: DWORD;
lpFileName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileSectionNamesW}

{$IFDEF UNICODE}
function GetPrivateProfileSectionNames(lpszReturnBuffer: LPWSTR; nSize: DWORD;
lpFileName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileSectionNames}
{$ELSE}
function GetPrivateProfileSectionNames(lpszReturnBuffer: LPSTR; nSize: DWORD;
lpFileName: LPCSTR): DWORD; stdcall;
{$EXTERNALSYM GetPrivateProfileSectionNames}
{$ENDIF}

function GetPrivateProfileStructA(lpszSection, lpszKey: LPCSTR; lpStruct: LPVOID;
uSizeStruct: UINT; szFile: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM GetPrivateProfileStructA}
function GetPrivateProfileStructW(lpszSection, lpszKey: LPCWSTR; lpStruct: LPVOID;
uSizeStruct: UINT; szFile: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM GetPrivateProfileStructW}

{$IFDEF UNICODE}
function GetPrivateProfileStruct(lpszSection, lpszKey: LPCWSTR; lpStruct: LPVOID;
uSizeStruct: UINT; szFile: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM GetPrivateProfileStruct}
{$ELSE}
function GetPrivateProfileStruct(lpszSection, lpszKey: LPCSTR; lpStruct: LPVOID;
uSizeStruct: UINT; szFile: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM GetPrivateProfileStruct}
{$ENDIF}

function WritePrivateProfileStructA(lpszSection, lpszKey: LPCSTR; lpStruct: LPVOID;
uSizeStruct: UINT; szFile: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileStructA}
function WritePrivateProfileStructW(lpszSection, lpszKey: LPCWSTR; lpStruct: LPVOID;
uSizeStruct: UINT; szFile: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileStructW}

{$IFDEF UNICODE}
function WritePrivateProfileStruct(lpszSection, lpszKey: LPCWSTR; lpStruct: LPVOID;
uSizeStruct: UINT; szFile: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM WritePrivateProfileStruct}
{$ELSE}
function WritePrivateProfileStruct(lpszSection, lpszKey: LPCSTR; lpStruct: LPVOID;
uSizeStruct: UINT; szFile: LPCSTR): BOOL; stdcall;

{$EXTERNALSYM WritePrivateProfileStruct}
{$ENDIF}

function GetDriveTypeA(lpRootPathName: LPCSTR): UINT; stdcall;
{$EXTERNALSYM GetDriveTypeA}
function GetDriveTypeW(lpRootPathName: LPCWSTR): UINT; stdcall;
{$EXTERNALSYM GetDriveTypeW}

{$IFDEF UNICODE}
function GetDriveType(lpRootPathName: LPCWSTR): UINT; stdcall;
{$EXTERNALSYM GetDriveType}
{$ELSE}
function GetDriveType(lpRootPathName: LPCSTR): UINT; stdcall;
{$EXTERNALSYM GetDriveType}
{$ENDIF}

function GetSystemDirectoryA(lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemDirectoryA}
function GetSystemDirectoryW(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemDirectoryW}

{$IFDEF UNICODE}
function GetSystemDirectory(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemDirectory}
{$ELSE}
function GetSystemDirectory(lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemDirectory}
{$ENDIF}

function GetTempPathA(nBufferLength: DWORD; lpBuffer: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetTempPathA}
function GetTempPathW(nBufferLength: DWORD; lpBuffer: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetTempPathW}

{$IFDEF UNICODE}
function GetTempPath(nBufferLength: DWORD; lpBuffer: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetTempPath}
{$ELSE}
function GetTempPath(nBufferLength: DWORD; lpBuffer: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetTempPath}
{$ENDIF}

function GetTempFileNameA(lpPathName, lpPrefixString: LPCSTR; uUnique: UINT;
lpTempFileName: LPSTR): UINT; stdcall;
{$EXTERNALSYM GetTempFileNameA}
function GetTempFileNameW(lpPathName, lpPrefixString: LPCWSTR; uUnique: UINT;
lpTempFileName: LPWSTR): UINT; stdcall;
{$EXTERNALSYM GetTempFileNameW}

{$IFDEF UNICODE}
function GetTempFileName(lpPathName, lpPrefixString: LPCWSTR; uUnique: UINT;
lpTempFileName: LPWSTR): UINT; stdcall;
{$EXTERNALSYM GetTempFileName}
{$ELSE}
function GetTempFileName(lpPathName, lpPrefixString: LPCSTR; uUnique: UINT;
lpTempFileName: LPSTR): UINT; stdcall;
{$EXTERNALSYM GetTempFileName}
{$ENDIF}

function GetWindowsDirectoryA(lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetWindowsDirectoryA}
function GetWindowsDirectoryW(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetWindowsDirectoryW}

{$IFDEF UNICODE}
function GetWindowsDirectory(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetWindowsDirectory}
{$ELSE}
function GetWindowsDirectory(lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetWindowsDirectory}
{$ENDIF}

function GetSystemWindowsDirectoryA(lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemWindowsDirectoryA}
function GetSystemWindowsDirectoryW(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemWindowsDirectoryW}

{$IFDEF UNICODE}
function GetSystemWindowsDirectory(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemWindowsDirectory}
{$ELSE}
function GetSystemWindowsDirectory(lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;


{$EXTERNALSYM GetSystemWindowsDirectory}
{$ENDIF}

function GetSystemWow64DirectoryA(lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemWow64DirectoryA}
function GetSystemWow64DirectoryW(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemWow64DirectoryW}

{$IFDEF UNICODE}
function GetSystemWow64Directory(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemWow64Directory}
{$ELSE}
function GetSystemWow64Directory(lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM GetSystemWow64Directory}
{$ENDIF}

//
// for GetProcAddress
//

type
PGET_SYSTEM_WOW64_DIRECTORY_A = function (lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM PGET_SYSTEM_WOW64_DIRECTORY_A}
PGET_SYSTEM_WOW64_DIRECTORY_W = function (lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$EXTERNALSYM PGET_SYSTEM_WOW64_DIRECTORY_W}

//
// GetProcAddress only accepts GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A,


// GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A, GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A.
// The others are if you want to use the strings in some other way.
//

const
GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A = ''GetSystemWow64DirectoryA'';
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A}
GET_SYSTEM_WOW64_DIRECTORY_NAME_A_W = WideString(''GetSystemWow64DirectoryA'');
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_A_W}
GET_SYSTEM_WOW64_DIRECTORY_NAME_A_T = __TEXT(''GetSystemWow64DirectoryA'');
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_A_T}
GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A = ''GetSystemWow64DirectoryW'';
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A}
GET_SYSTEM_WOW64_DIRECTORY_NAME_W_W = WideString(''GetSystemWow64DirectoryW'');
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_W_W}
GET_SYSTEM_WOW64_DIRECTORY_NAME_W_T = __TEXT(''GetSystemWow64DirectoryW'');
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_W_T}

{$IFDEF UNICODE}

GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A = GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A;
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A}
GET_SYSTEM_WOW64_DIRECTORY_NAME_T_W = GET_SYSTEM_WOW64_DIRECTORY_NAME_W_W;
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_T_W}
GET_SYSTEM_WOW64_DIRECTORY_NAME_T_T = GET_SYSTEM_WOW64_DIRECTORY_NAME_W_T;
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_T_T}
{$ELSE}
GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A = GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A;
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A}
GET_SYSTEM_WOW64_DIRECTORY_NAME_T_W = GET_SYSTEM_WOW64_DIRECTORY_NAME_A_W;
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_T_W}
GET_SYSTEM_WOW64_DIRECTORY_NAME_T_T = GET_SYSTEM_WOW64_DIRECTORY_NAME_A_T;
{$EXTERNALSYM GET_SYSTEM_WOW64_DIRECTORY_NAME_T_T}
{$ENDIF}

function SetCurrentDirectoryA(lpPathName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetCurrentDirectoryA}
function SetCurrentDirectoryW(lpPathName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetCurrentDirectoryW}

{$IFDEF UNICODE}
function SetCurrentDirectory(lpPathName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetCurrentDirectory}
{$ELSE}
function SetCurrentDirectory(lpPathName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetCurrentDirectory}
{$ENDIF}

function GetCurrentDirectoryA(nBufferLength: DWORD; lpBuffer: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetCurrentDirectoryA}
function GetCurrentDirectoryW(nBufferLength: DWORD; lpBuffer: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetCurrentDirectoryW}

{$IFDEF UNICODE}
function GetCurrentDirectory(nBufferLength: DWORD; lpBuffer: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetCurrentDirectory}
{$ELSE}
function GetCurrentDirectory(nBufferLength: DWORD; lpBuffer: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetCurrentDirectory}
{$ENDIF}

//#if _WIN32_WINNT >= 0x0502

function SetDllDirectoryA(lpPathName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetDllDirectoryA}
function SetDllDirectoryW(lpPathName: LPCWSTR): BOOL; stdcall;


{$EXTERNALSYM SetDllDirectoryW}

{$IFDEF UNICODE}
function SetDllDirectory(lpPathName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetDllDirectory}
{$ELSE}
function SetDllDirectory(lpPathName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetDllDirectory}
{$ENDIF}

function GetDllDirectoryA(nBufferLength: DWORD; lpBuffer: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetDllDirectoryA}
function GetDllDirectoryW(nBufferLength: DWORD; lpBuffer: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetDllDirectoryW}

{$IFDEF UNICODE}
function GetDllDirectory(nBufferLength: DWORD; lpBuffer: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetDllDirectory}
{$ELSE}
function GetDllDirectory(nBufferLength: DWORD; lpBuffer: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetDllDirectory}
{$ENDIF}

//#endif // _WIN32_WINNT >= 0x0502

function GetDiskFreeSpaceA(lpRootPathName: LPCSTR; var lpSectorsPerCluster,
lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters: DWORD): BOOL; stdcall;


{$EXTERNALSYM GetDiskFreeSpaceA}
function GetDiskFreeSpaceW(lpRootPathName: LPCWSTR; var lpSectorsPerCluster,
lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetDiskFreeSpaceW}

{$IFDEF UNICODE}
function GetDiskFreeSpace(lpRootPathName: LPCWSTR; var lpSectorsPerCluster,
lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetDiskFreeSpace}
{$ELSE}
function GetDiskFreeSpace(lpRootPathName: LPCSTR; lpSectorsPerCluster,
lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetDiskFreeSpace}
{$ENDIF}

function GetDiskFreeSpaceExA(lpDirectoryName: LPCSTR; var lpFreeBytesAvailableToCaller,
lpTotalNumberOfBytes: ULARGE_INTEGER; lpTotalNumberOfFreeBytes: PULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM GetDiskFreeSpaceExA}
function GetDiskFreeSpaceExW(lpDirectoryName: LPCWSTR; var lpFreeBytesAvailableToCaller,


lpTotalNumberOfBytes: ULARGE_INTEGER; lpTotalNumberOfFreeBytes: PULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM GetDiskFreeSpaceExW}

{$IFDEF UNICODE}
function GetDiskFreeSpaceEx(lpDirectoryName: LPCWSTR; var lpFreeBytesAvailableToCaller,
lpTotalNumberOfBytes: ULARGE_INTEGER; lpTotalNumberOfFreeBytes: PULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM GetDiskFreeSpaceEx}
{$ELSE}
function GetDiskFreeSpaceEx(lpDirectoryName: LPCSTR; var lpFreeBytesAvailableToCaller,
lpTotalNumberOfBytes: ULARGE_INTEGER; lpTotalNumberOfFreeBytes: PULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM GetDiskFreeSpaceEx}
{$ENDIF}

function CreateDirectoryA(lpPathName: LPCSTR; lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateDirectoryA}
function CreateDirectoryW(lpPathName: LPCWSTR; lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateDirectoryW}

{$IFDEF UNICODE}
function CreateDirectory(lpPathName: LPCWSTR; lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;

{$EXTERNALSYM CreateDirectory}
{$ELSE}
function CreateDirectory(lpPathName: LPCSTR; lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateDirectory}
{$ENDIF}

function CreateDirectoryExA(lpTemplateDirectory: LPCSTR; lpNewDirectory: LPCSTR;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateDirectoryExA}
function CreateDirectoryExW(lpTemplateDirectory: LPCWSTR; lpNewDirectory: LPCWSTR;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateDirectoryExW}

{$IFDEF UNICODE}
function CreateDirectoryEx(lpTemplateDirectory: LPCWSTR; lpNewDirectory: LPCWSTR;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateDirectoryEx}
{$ELSE}
function CreateDirectoryEx(lpTemplateDirectory: LPCSTR; lpNewDirectory: LPCSTR;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateDirectoryEx}
{$ENDIF}

function RemoveDirectoryA(lpPathName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM RemoveDirectoryA}
function RemoveDirectoryW(lpPathName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM RemoveDirectoryW}

{$IFDEF UNICODE}
function RemoveDirectory(lpPathName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM RemoveDirectory}
{$ELSE}
function RemoveDirectory(lpPathName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM RemoveDirectory}
{$ENDIF}

function GetFullPathNameA(lpFileName: LPCSTR; nBufferLength: DWORD;
lpBuffer: LPSTR; var lpFilePart: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetFullPathNameA}
function GetFullPathNameW(lpFileName: LPCWSTR; nBufferLength: DWORD;
lpBuffer: LPWSTR; var lpFilePart: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetFullPathNameA}

{$IFDEF UNICODE}
function GetFullPathName(lpFileName: LPCWSTR; nBufferLength: DWORD;
lpBuffer: LPWSTR; var lpFilePart: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM GetFullPathName}
{$ELSE}
function GetFullPathName(lpFileName: LPCSTR; nBufferLength: DWORD;
lpBuffer: LPSTR; var lpFilePart: LPSTR): DWORD; stdcall;
{$EXTERNALSYM GetFullPathName}
{$ENDIF}

const
DDD_RAW_TARGET_PATH = $00000001;
{$EXTERNALSYM DDD_RAW_TARGET_PATH}
DDD_REMOVE_DEFINITION = $00000002;
{$EXTERNALSYM DDD_REMOVE_DEFINITION}
DDD_EXACT_MATCH_ON_REMOVE = $00000004;
{$EXTERNALSYM DDD_EXACT_MATCH_ON_REMOVE}
DDD_NO_BROADCAST_SYSTEM = $00000008;
{$EXTERNALSYM DDD_NO_BROADCAST_SYSTEM}
DDD_LUID_BROADCAST_DRIVE = $00000010;
{$EXTERNALSYM DDD_LUID_BROADCAST_DRIVE}

function DefineDosDeviceA(dwFlags: DWORD; lpDeviceName, lpTargetPath: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM DefineDosDeviceA}
function DefineDosDeviceW(dwFlags: DWORD; lpDeviceName, lpTargetPath: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM DefineDosDeviceW}

{$IFDEF UNICODE}
function DefineDosDevice(dwFlags: DWORD; lpDeviceName, lpTargetPath: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM DefineDosDevice}
{$ELSE}
function DefineDosDevice(dwFlags: DWORD; lpDeviceName, lpTargetPath: LPCSTR): BOOL; stdcall;


{$EXTERNALSYM DefineDosDevice}
{$ENDIF}

function QueryDosDeviceA(lpDeviceName, lpTargetPath: LPSTR; ucchMax: DWORD): DWORD; stdcall;
{$EXTERNALSYM QueryDosDeviceA}
function QueryDosDeviceW(lpDeviceName, lpTargetPath: LPWSTR; ucchMax: DWORD): DWORD; stdcall;
{$EXTERNALSYM QueryDosDeviceW}

{$IFDEF UNICODE}
function QueryDosDevice(lpDeviceName, lpTargetPath: LPWSTR; ucchMax: DWORD): DWORD; stdcall;
{$EXTERNALSYM QueryDosDevice}
{$ELSE}
function QueryDosDevice(lpDeviceName, lpTargetPath: LPSTR; ucchMax: DWORD): DWORD; stdcall;
{$EXTERNALSYM QueryDosDevice}
{$ENDIF}

function CreateFileA(lpFileName: LPCSTR; dwDesiredAccess, dwShareMode: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES; dwCreationDisposition: DWORD;
dwFlagsAndAttributes: DWORD; hTemplateFile: HANDLE): HANDLE; stdcall;
{$EXTERNALSYM CreateFileA}
function CreateFileW(lpFileName: LPCWSTR; dwDesiredAccess, dwShareMode: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES; dwCreationDisposition: DWORD;
dwFlagsAndAttributes: DWORD; hTemplateFile: HANDLE): HANDLE; stdcall;
{$EXTERNALSYM CreateFileW}

{$IFDEF UNICODE}
function CreateFile(lpFileName: LPCWSTR; dwDesiredAccess, dwShareMode: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES; dwCreationDisposition: DWORD;
dwFlagsAndAttributes: DWORD; hTemplateFile: HANDLE): HANDLE; stdcall;
{$EXTERNALSYM CreateFile}
{$ELSE}
function CreateFile(lpFileName: LPCSTR; dwDesiredAccess, dwShareMode: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES; dwCreationDisposition: DWORD;
dwFlagsAndAttributes: DWORD; hTemplateFile: HANDLE): HANDLE; stdcall;
{$EXTERNALSYM CreateFile}
{$ENDIF}

function SetFileAttributesA(lpFileName: LPCSTR; dwFileAttributes: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetFileAttributesA}
function SetFileAttributesW(lpFileName: LPCWSTR; dwFileAttributes: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetFileAttributesW}

{$IFDEF UNICODE}
function SetFileAttributes(lpFileName: LPCWSTR; dwFileAttributes: DWORD): BOOL; stdcall;

{$EXTERNALSYM SetFileAttributes}
{$ELSE}
function SetFileAttributes(lpFileName: LPCSTR; dwFileAttributes: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetFileAttributes}
{$ENDIF}

function GetFileAttributesA(lpFileName: LPCSTR): DWORD; stdcall;
{$EXTERNALSYM GetFileAttributesA}
function GetFileAttributesW(lpFileName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM GetFileAttributesW}

{$IFDEF UNICODE}
function GetFileAttributes(lpFileName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM GetFileAttributes}
{$ELSE}
function GetFileAttributes(lpFileName: LPCSTR): DWORD; stdcall;
{$EXTERNALSYM GetFileAttributes}
{$ENDIF}

type
_GET_FILEEX_INFO_LEVELS = (GetFileExInfoStandard, GetFileExMaxInfoLevel);
{$EXTERNALSYM _GET_FILEEX_INFO_LEVELS}
GET_FILEEX_INFO_LEVELS = _GET_FILEEX_INFO_LEVELS;
{$EXTERNALSYM GET_FILEEX_INFO_LEVELS}
TGetFileExInfoLevels = GET_FILEEX_INFO_LEVELS;

function GetFileAttributesExA(lpFileName: LPCSTR;
fInfoLevelId: GET_FILEEX_INFO_LEVELS; lpFileInformation: LPVOID): BOOL; stdcall;

{$EXTERNALSYM GetFileAttributesExA}
function GetFileAttributesExW(lpFileName: LPCWSTR;
fInfoLevelId: GET_FILEEX_INFO_LEVELS; lpFileInformation: LPVOID): BOOL; stdcall;
{$EXTERNALSYM GetFileAttributesExW}

{$IFDEF UNICODE}
function GetFileAttributesEx(lpFileName: LPCWSTR;
fInfoLevelId: GET_FILEEX_INFO_LEVELS; lpFileInformation: LPVOID): BOOL; stdcall;
{$EXTERNALSYM GetFileAttributesEx}
{$ELSE}
function GetFileAttributesEx(lpFileName: LPCSTR;
fInfoLevelId: GET_FILEEX_INFO_LEVELS; lpFileInformation: LPVOID): BOOL; stdcall;
{$EXTERNALSYM GetFileAttributesEx}
{$ENDIF}

function GetCompressedFileSizeA(lpFileName: LPCSTR; lpFileSizeHigh: LPDWORD): DWORD; stdcall;
{$EXTERNALSYM GetCompressedFileSizeA}
function GetCompressedFileSizeW(lpFileName: LPCWSTR; lpFileSizeHigh: LPDWORD): DWORD; stdcall;
{$EXTERNALSYM GetCompressedFileSizeW}

{$IFDEF UNICODE}
function GetCompressedFileSize(lpFileName: LPCWSTR; lpFileSizeHigh: LPDWORD): DWORD; stdcall;
{$EXTERNALSYM GetCompressedFileSize}
{$ELSE}
function GetCompressedFileSize(lpFileName: LPCSTR; lpFileSizeHigh: LPDWORD): DWORD; stdcall;
{$EXTERNALSYM GetCompressedFileSize}
{$ENDIF}

function DeleteFileA(lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM DeleteFileA}
function DeleteFileW(lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM DeleteFileW}

{$IFDEF UNICODE}
function DeleteFile(lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM DeleteFile}
{$ELSE}
function DeleteFile(lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM DeleteFile}
{$ENDIF}

type
_FINDEX_INFO_LEVELS = (FindExInfoStandard, FindExInfoMaxInfoLevel);
{$EXTERNALSYM _FINDEX_INFO_LEVELS}
FINDEX_INFO_LEVELS = _FINDEX_INFO_LEVELS;
{$EXTERNALSYM FINDEX_INFO_LEVELS}
TFindExInfoLevels = FINDEX_INFO_LEVELS;

_FINDEX_SEARCH_OPS = (
FindExSearchNameMatch,
FindExSearchLimitToDirectories,
FindExSearchLimitToDevices,
FindExSearchMaxSearchOp);
{$EXTERNALSYM _FINDEX_SEARCH_OPS}
FINDEX_SEARCH_OPS = _FINDEX_SEARCH_OPS;
{$EXTERNALSYM FINDEX_SEARCH_OPS}
TFindExSearchOps = FINDEX_SEARCH_OPS;

const
FIND_FIRST_EX_CASE_SENSITIVE = $00000001;
{$EXTERNALSYM FIND_FIRST_EX_CASE_SENSITIVE}

function FindFirstFileExA(lpFileName: LPCSTR; fInfoLevelId: FINDEX_INFO_LEVELS;
lpFindFileData: LPVOID; fSearchOp: FINDEX_SEARCH_OPS; lpSearchFilter: LPVOID;
dwAdditionalFlags: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstFileExA}
function FindFirstFileExW(lpFileName: LPCWSTR; fInfoLevelId: FINDEX_INFO_LEVELS;
lpFindFileData: LPVOID; fSearchOp: FINDEX_SEARCH_OPS; lpSearchFilter: LPVOID;
dwAdditionalFlags: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstFileExW}

{$IFDEF UNICODE}
function FindFirstFileEx(lpFileName: LPCWSTR; fInfoLevelId: FINDEX_INFO_LEVELS;
lpFindFileData: LPVOID; fSearchOp: FINDEX_SEARCH_OPS; lpSearchFilter: LPVOID;
dwAdditionalFlags: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstFileEx}
{$ELSE}
function FindFirstFileEx(lpFileName: LPCSTR; fInfoLevelId: FINDEX_INFO_LEVELS;


lpFindFileData: LPVOID; fSearchOp: FINDEX_SEARCH_OPS; lpSearchFilter: LPVOID;
dwAdditionalFlags: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstFileEx}
{$ENDIF}

function FindFirstFileA(lpFileName: LPCSTR; var lpFindFileData: WIN32_FIND_DATAA): HANDLE; stdcall;
{$EXTERNALSYM FindFirstFileA}
function FindFirstFileW(lpFileName: LPCWSTR; var lpFindFileData: WIN32_FIND_DATAW): HANDLE; stdcall;
{$EXTERNALSYM FindFirstFileW}

{$IFDEF UNICODE}
function FindFirstFile(lpFileName: LPCWSTR; var lpFindFileData: WIN32_FIND_DATAW): HANDLE; stdcall;
{$EXTERNALSYM FindFirstFile}
{$ELSE}
function FindFirstFile(lpFileName: LPCSTR; var lpFindFileData: WIN32_FIND_DATAA): HANDLE; stdcall;
{$EXTERNALSYM FindFirstFile}
{$ENDIF}

function FindNextFileA(hFindFile: HANDLE; var FindFileData: WIN32_FIND_DATAA): BOOL; stdcall;
{$EXTERNALSYM FindNextFileA}
function FindNextFileW(hFindFile: HANDLE; var lpFindFileData: WIN32_FIND_DATAW): BOOL; stdcall;
{$EXTERNALSYM FindNextFileW}

{$IFDEF UNICODE}
function FindNextFile(hFindFile: HANDLE; var lpFindFileData: WIN32_FIND_DATAW): BOOL; stdcall;
{$EXTERNALSYM FindNextFile}
{$ELSE}
function FindNextFile(hFindFile: HANDLE; var lpFindFileData: WIN32_FIND_DATAA): BOOL; stdcall;
{$EXTERNALSYM FindNextFile}
{$ENDIF}

function SearchPathA(lpPath, lpFileName, lpExtension: LPCSTR; nBufferLength: DWORD;
lpBuffer: LPSTR; var lpFilePart: LPSTR): DWORD; stdcall;
{$EXTERNALSYM SearchPathA}
function SearchPathW(lpPath, lpFileName, lpExtension: LPCWSTR; nBufferLength: DWORD;
lpBuffer: LPWSTR; var lpFilePart: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM SearchPathW}

{$IFDEF UNICODE}
function SearchPath(lpPath, lpFileName, lpExtension: LPCWSTR; nBufferLength: DWORD;
lpBuffer: LPWSTR; var lpFilePart: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM SearchPath}
{$ELSE}
function SearchPath(lpPath, lpFileName, lpExtension: LPCSTR; nBufferLength: DWORD;
lpBuffer: LPSTR; var lpFilePart: LPSTR): DWORD; stdcall;
{$EXTERNALSYM SearchPath}
{$ENDIF}

function CopyFileA(lpExistingFileName, lpNewFileName: LPCSTR; bFailIfExists: BOOL): BOOL; stdcall;
{$EXTERNALSYM CopyFileA}
function CopyFileW(lpExistingFileName, lpNewFileName: LPCWSTR; bFailIfExists: BOOL): BOOL; stdcall;
{$EXTERNALSYM CopyFileW}

{$IFDEF UNICODE}
function CopyFile(lpExistingFileName, lpNewFileName: LPCWSTR; bFailIfExists: BOOL): BOOL; stdcall;
{$EXTERNALSYM CopyFile}
{$ELSE}
function CopyFile(lpExistingFileName, lpNewFileName: LPCSTR; bFailIfExists: BOOL): BOOL; stdcall;
{$EXTERNALSYM CopyFile}
{$ENDIF}

type
LPPROGRESS_ROUTINE = function (
TotalFileSize: LARGE_INTEGER;
TotalBytesTransferred: LARGE_INTEGER;
StreamSize: LARGE_INTEGER;
StreamBytesTransferred: LARGE_INTEGER;
dwStreamNumber: DWORD;
dwCallbackReason: DWORD;
hSourceFile: HANDLE;
hDestinationFile: HANDLE;
lpData: LPVOID): DWORD; stdcall;
{$EXTERNALSYM LPPROGRESS_ROUTINE}
TProgressRoutine = LPPROGRESS_ROUTINE;

function CopyFileExA(lpExistingFileName, lpNewFileName: LPCSTR;
lpProgressRoutine: LPPROGRESS_ROUTINE; lpData: LPVOID; var pbCancel: BOOL;
dwCopyFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM CopyFileExA}
function CopyFileExW(lpExistingFileName, lpNewFileName: LPCWSTR;
lpProgressRoutine: LPPROGRESS_ROUTINE; lpData: LPVOID; var pbCancel: BOOL;
dwCopyFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM CopyFileExW}

{$IFDEF UNICODE}
function CopyFileEx(lpExistingFileName, lpNewFileName: LPCWSTR;
lpProgressRoutine: LPPROGRESS_ROUTINE; lpData: LPVOID; var pbCancel: BOOL;
dwCopyFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM CopyFileEx}
{$ELSE}
function CopyFileEx(lpExistingFileName, lpNewFileName: LPCSTR;
lpProgressRoutine: LPPROGRESS_ROUTINE; lpData: LPVOID; var pbCancel: BOOL;
dwCopyFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM CopyFileEx}
{$ENDIF}

function MoveFileA(lpExistingFileName, lpNewFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM MoveFileA}


function MoveFileW(lpExistingFileName, lpNewFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM MoveFileW}

{$IFDEF UNICODE}
function MoveFile(lpExistingFileName, lpNewFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM MoveFile}
{$ELSE}
function MoveFile(lpExistingFileName, lpNewFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM MoveFile}
{$ENDIF}

function MoveFileExA(lpExistingFileName, lpNewFileName: LPCSTR; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM MoveFileExA}
function MoveFileExW(lpExistingFileName, lpNewFileName: LPCWSTR; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM MoveFileExW}

{$IFDEF UNICODE}
function MoveFileEx(lpExistingFileName, lpNewFileName: LPCWSTR; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM MoveFileEx}
{$ELSE}
function MoveFileEx(lpExistingFileName, lpNewFileName: LPCSTR; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM MoveFileEx}
{$ENDIF}

function MoveFileWithProgressA(lpExistingFileName, lpNewFileName: LPCSTR;
lpProgressRoutine: LPPROGRESS_ROUTINE; lpData: LPVOID; dwFlags: DWORD): BOOL; stdcall;


{$EXTERNALSYM MoveFileWithProgressA}
function MoveFileWithProgressW(lpExistingFileName, lpNewFileName: LPCWSTR;
lpProgressRoutine: LPPROGRESS_ROUTINE; lpData: LPVOID; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM MoveFileWithProgressW}

{$IFDEF UNICODE}
function MoveFileWithProgress(lpExistingFileName, lpNewFileName: LPCWSTR;
lpProgressRoutine: LPPROGRESS_ROUTINE; lpData: LPVOID; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM MoveFileWithProgress}
{$ELSE}
function MoveFileWithProgress(lpExistingFileName, lpNewFileName: LPCSTR;
lpProgressRoutine: LPPROGRESS_ROUTINE; lpData: LPVOID; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM MoveFileWithProgress}
{$ENDIF}

const
MOVEFILE_REPLACE_EXISTING = $00000001;
{$EXTERNALSYM MOVEFILE_REPLACE_EXISTING}
MOVEFILE_COPY_ALLOWED = $00000002;
{$EXTERNALSYM MOVEFILE_COPY_ALLOWED}
MOVEFILE_DELAY_UNTIL_REBOOT = $00000004;
{$EXTERNALSYM MOVEFILE_DELAY_UNTIL_REBOOT}
MOVEFILE_WRITE_THROUGH = $00000008;
{$EXTERNALSYM MOVEFILE_WRITE_THROUGH}
MOVEFILE_CREATE_HARDLINK = $00000010;
{$EXTERNALSYM MOVEFILE_CREATE_HARDLINK}
MOVEFILE_FAIL_IF_NOT_TRACKABLE = $00000020;
{$EXTERNALSYM MOVEFILE_FAIL_IF_NOT_TRACKABLE}

function ReplaceFileA(lpReplacedFileName, lpReplacementFileName,
lpBackupFileName: LPCSTR; dwReplaceFlags: DWORD; lpExclude: LPVOID;
lpReserved: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ReplaceFileA}
function ReplaceFileW(lpReplacedFileName, lpReplacementFileName,
lpBackupFileName: LPCWSTR; dwReplaceFlags: DWORD; lpExclude: LPVOID;
lpReserved: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ReplaceFileW}

{$IFDEF UNICODE}
function ReplaceFile(lpReplacedFileName, lpReplacementFileName,
lpBackupFileName: LPCWSTR; dwReplaceFlags: DWORD; lpExclude: LPVOID;
lpReserved: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ReplaceFile}
{$ELSE}
function ReplaceFile(lpReplacedFileName, lpReplacementFileName,
lpBackupFileName: LPCSTR; dwReplaceFlags: DWORD; lpExclude: LPVOID;
lpReserved: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ReplaceFile}
{$ENDIF}

//
// API call to create hard links.
//

function CreateHardLinkA(lpFileName, lpExistingFileName: LPCSTR;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateHardLinkA}
function CreateHardLinkW(lpFileName, lpExistingFileName: LPCWSTR;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateHardLinkW}

{$IFDEF UNICODE}
function CreateHardLink(lpFileName, lpExistingFileName: LPCWSTR;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateHardLink}
{$ELSE}
function CreateHardLink(lpFileName, lpExistingFileName: LPCSTR;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall;
{$EXTERNALSYM CreateHardLink}
{$ENDIF}

//#if (_WIN32_WINNT >= 0x0501)

//
// API call to enumerate for streams within a file
//

type
_STREAM_INFO_LEVELS = (FindStreamInfoStandard, FindStreamInfoMaxInfoLevel);

{$EXTERNALSYM _STREAM_INFO_LEVELS}
STREAM_INFO_LEVELS = _STREAM_INFO_LEVELS;
{$EXTERNALSYM STREAM_INFO_LEVELS}
TStreamInfoLevels = STREAM_INFO_LEVELS;

_WIN32_FIND_STREAM_DATA = record
StreamSize: LARGE_INTEGER;
cStreamName: array [0..MAX_PATH + 35] of WCHAR;
end;
{$EXTERNALSYM _WIN32_FIND_STREAM_DATA}
WIN32_FIND_STREAM_DATA = _WIN32_FIND_STREAM_DATA;
{$EXTERNALSYM WIN32_FIND_STREAM_DATA}
PWIN32_FIND_STREAM_DATA = ^WIN32_FIND_STREAM_DATA;
{$EXTERNALSYM PWIN32_FIND_STREAM_DATA}
TWin32FindStreamData = WIN32_FIND_STREAM_DATA;
PWin32FindStreamData = PWIN32_FIND_STREAM_DATA;

function FindFirstStreamW(lpFileName: LPCWSTR; InfoLevel: STREAM_INFO_LEVELS; lpFindStreamData: LPVOID; dwFlags: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstStreamW}

function FindNextStreamW(hFindStream: HANDLE; lpFindStreamData: LPVOID): BOOL; stdcall;
{$EXTERNALSYM FindNextStreamW}

//#endif // (_WIN32_WINNT >= 0x0500)

function CreateNamedPipeA(lpName: LPCSTR; dwOpenMode, dwPipeMode, nMaxInstances,
nOutBufferSize, nInBufferSize, nDefaultTimeOut: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): HANDLE; stdcall;
{$EXTERNALSYM CreateNamedPipeA}
function CreateNamedPipeW(lpName: LPCWSTR; dwOpenMode, dwPipeMode, nMaxInstances,
nOutBufferSize, nInBufferSize, nDefaultTimeOut: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): HANDLE; stdcall;
{$EXTERNALSYM CreateNamedPipeW}

{$IFDEF UNICODE}
function CreateNamedPipe(lpName: LPCWSTR; dwOpenMode, dwPipeMode, nMaxInstances,
nOutBufferSize, nInBufferSize, nDefaultTimeOut: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): HANDLE; stdcall;
{$EXTERNALSYM CreateNamedPipe}
{$ELSE}
function CreateNamedPipe(lpName: LPCSTR; dwOpenMode, dwPipeMode, nMaxInstances,
nOutBufferSize, nInBufferSize, nDefaultTimeOut: DWORD;
lpSecurityAttributes: LPSECURITY_ATTRIBUTES): HANDLE; stdcall;
{$EXTERNALSYM CreateNamedPipe}
{$ENDIF}

function GetNamedPipeHandleStateA(hNamedPipe: HANDLE; lpState, lpCurInstances,


lpMaxCollectionCount, lpCollectDataTimeout: LPDWORD; lpUserName: LPSTR;
nMaxUserNameSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetNamedPipeHandleStateA}
function GetNamedPipeHandleStateW(hNamedPipe: HANDLE; lpState, lpCurInstances,
lpMaxCollectionCount, lpCollectDataTimeout: LPDWORD; lpUserName: LPWSTR;
nMaxUserNameSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetNamedPipeHandleStateW}

{$IFDEF UNICODE}
function GetNamedPipeHandleState(hNamedPipe: HANDLE; lpState, lpCurInstances,
lpMaxCollectionCount, lpCollectDataTimeout: LPDWORD; lpUserName: LPWSTR;
nMaxUserNameSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetNamedPipeHandleState}
{$ELSE}
function GetNamedPipeHandleState(hNamedPipe: HANDLE; lpState, lpCurInstances,
lpMaxCollectionCount, lpCollectDataTimeout: LPDWORD; lpUserName: LPSTR;
nMaxUserNameSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetNamedPipeHandleState}
{$ENDIF}

function CallNamedPipeA(lpNamedPipeName: LPCSTR; lpInBuffer: LPVOID;

nInBufferSize: DWORD; lpOutBuffer: LPVOID; nOutBufferSize: DWORD;
var lpBytesRead: DWORD; nTimeOut: DWORD): BOOL; stdcall;
{$EXTERNALSYM CallNamedPipeA}
function CallNamedPipeW(lpNamedPipeName: LPCWSTR; lpInBuffer: LPVOID;
nInBufferSize: DWORD; lpOutBuffer: LPVOID; nOutBufferSize: DWORD;
var lpBytesRead: DWORD; nTimeOut: DWORD): BOOL; stdcall;
{$EXTERNALSYM CallNamedPipeW}

{$IFDEF UNICODE}
function CallNamedPipe(lpNamedPipeName: LPCWSTR; lpInBuffer: LPVOID;
nInBufferSize: DWORD; lpOutBuffer: LPVOID; nOutBufferSize: DWORD;
var lpBytesRead: DWORD; nTimeOut: DWORD): BOOL; stdcall;
{$EXTERNALSYM CallNamedPipe}
{$ELSE}
function CallNamedPipe(lpNamedPipeName: LPCSTR; lpInBuffer: LPVOID;
nInBufferSize: DWORD; lpOutBuffer: LPVOID; nOutBufferSize: DWORD;
var lpBytesRead: DWORD; nTimeOut: DWORD): BOOL; stdcall;
{$EXTERNALSYM CallNamedPipe}
{$ENDIF}

function WaitNamedPipeA(lpNamedPipeName: LPCSTR; nTimeOut: DWORD): BOOL; stdcall;
{$EXTERNALSYM WaitNamedPipeA}
function WaitNamedPipeW(lpNamedPipeName: LPCWSTR; nTimeOut: DWORD): BOOL; stdcall;
{$EXTERNALSYM WaitNamedPipeW}

{$IFDEF UNICODE}
function WaitNamedPipe(lpNamedPipeName: LPCWSTR; nTimeOut: DWORD): BOOL; stdcall;
{$EXTERNALSYM WaitNamedPipe}
{$ELSE}
function WaitNamedPipe(lpNamedPipeName: LPCSTR; nTimeOut: DWORD): BOOL; stdcall;
{$EXTERNALSYM WaitNamedPipe}
{$ENDIF}

function SetVolumeLabelA(lpRootPathName, lpVolumeName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetVolumeLabelA}
function SetVolumeLabelW(lpRootPathName, lpVolumeName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetVolumeLabelW}

{$IFDEF UNICODE}
function SetVolumeLabel(lpRootPathName, lpVolumeName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetVolumeLabel}
{$ELSE}
function SetVolumeLabel(lpRootPathName, lpVolumeName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetVolumeLabel}
{$ENDIF}

procedure SetFileApisToOEM; stdcall;
{$EXTERNALSYM SetFileApisToOEM}

procedure SetFileApisToANSI; stdcall;


{$EXTERNALSYM SetFileApisToANSI}

function AreFileApisANSI: BOOL; stdcall;
{$EXTERNALSYM AreFileApisANSI}

function GetVolumeInformationA(lpRootPathName: LPCSTR; lpVolumeNameBuffer: LPSTR;
nVolumeNameSize: DWORD; lpVolumeSerialNumber: LPDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: LPSTR; nFileSystemNameSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumeInformationA}
function GetVolumeInformationW(lpRootPathName: LPCWSTR; lpVolumeNameBuffer: LPWSTR;
nVolumeNameSize: DWORD; lpVolumeSerialNumber: LPDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: LPWSTR; nFileSystemNameSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumeInformationW}

{$IFDEF UNICODE}
function GetVolumeInformation(lpRootPathName: LPCWSTR; lpVolumeNameBuffer: LPWSTR;
nVolumeNameSize: DWORD; lpVolumeSerialNumber: LPDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: LPWSTR; nFileSystemNameSize: DWORD): BOOL; stdcall;


{$EXTERNALSYM GetVolumeInformation}
{$ELSE}
function GetVolumeInformation(lpRootPathName: LPCSTR; lpVolumeNameBuffer: LPSTR;
nVolumeNameSize: DWORD; lpVolumeSerialNumber: LPDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: LPSTR; nFileSystemNameSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumeInformation}
{$ENDIF}

function CancelIo(hFile: HANDLE): BOOL; stdcall;
{$EXTERNALSYM CancelIo}

//
// Event logging APIs
//

function ClearEventLogA(hEventLog: HANDLE; lpBackupFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM ClearEventLogA}
function ClearEventLogW(hEventLog: HANDLE; lpBackupFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM ClearEventLogW}

{$IFDEF UNICODE}
function ClearEventLog(hEventLog: HANDLE; lpBackupFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM ClearEventLogA}
{$ELSE}
function ClearEventLog(hEventLog: HANDLE; lpBackupFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM ClearEventLogA}


{$ENDIF}

function BackupEventLogA(hEventLog: HANDLE; lpBackupFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM BackupEventLogA}
function BackupEventLogW(hEventLog: HANDLE; lpBackupFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM BackupEventLogW}

{$IFDEF UNICODE}
function BackupEventLog(hEventLog: HANDLE; lpBackupFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM BackupEventLogA}
{$ELSE}
function BackupEventLog(hEventLog: HANDLE; lpBackupFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM BackupEventLogA}
{$ENDIF}

function CloseEventLog(hEventLog: HANDLE): BOOL; stdcall;
{$EXTERNALSYM CloseEventLog}

function DeregisterEventSource(hEventLog: HANDLE): BOOL; stdcall;
{$EXTERNALSYM DeregisterEventSource}

function NotifyChangeEventLog(hEventLog, hEvent: HANDLE): BOOL; stdcall;
{$EXTERNALSYM NotifyChangeEventLog}

function GetNumberOfEventLogRecords(hEventLog: HANDLE; var NumberOfRecords: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetNumberOfEventLogRecords}



function GetOldestEventLogRecord(hEventLog: HANDLE; var OldestRecord: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetOldestEventLogRecord}

function OpenEventLogA(lpUNCServerName, lpSourceName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenEventLogA}
function OpenEventLogW(lpUNCServerName, lpSourceName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenEventLogW}

{$IFDEF UNICODE}
function OpenEventLog(lpUNCServerName, lpSourceName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenEventLogA}
{$ELSE}
function OpenEventLog(lpUNCServerName, lpSourceName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenEventLogA}
{$ENDIF}

function RegisterEventSourceA(lpUNCServerName, lpSourceName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM RegisterEventSourceA}
function RegisterEventSourceW(lpUNCServerName, lpSourceName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM RegisterEventSourceW}

{$IFDEF UNICODE}
function RegisterEventSource(lpUNCServerName, lpSourceName: LPCWSTR): HANDLE; stdcall;


{$EXTERNALSYM RegisterEventSourceA}
{$ELSE}
function RegisterEventSource(lpUNCServerName, lpSourceName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM RegisterEventSourceA}
{$ENDIF}

function OpenBackupEventLogA(lpUNCServerName, lpFileName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenBackupEventLogA}
function OpenBackupEventLogW(lpUNCServerName, lpFileName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenBackupEventLogW}

{$IFDEF UNICODE}
function OpenBackupEventLog(lpUNCServerName, lpFileName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenBackupEventLogA}
{$ELSE}
function OpenBackupEventLog(lpUNCServerName, lpFileName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenBackupEventLogA}
{$ENDIF}

function ReadEventLogA(hEventLog: HANDLE; dwReadFlags, dwRecordOffset: DWORD;
lpBuffer: LPVOID; nNumberOfBytesToRead: DWORD;
var pnBytesRead, pnMinNumberOfBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM ReadEventLogA}
function ReadEventLogW(hEventLog: HANDLE; dwReadFlags, dwRecordOffset: DWORD;
lpBuffer: LPVOID; nNumberOfBytesToRead: DWORD;
var pnBytesRead, pnMinNumberOfBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM ReadEventLogW}

{$IFDEF UNICODE}
function ReadEventLog(hEventLog: HANDLE; dwReadFlags, dwRecordOffset: DWORD;
lpBuffer: LPVOID; nNumberOfBytesToRead: DWORD;
var pnBytesRead, pnMinNumberOfBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM ReadEventLog}
{$ELSE}
function ReadEventLog(hEventLog: HANDLE; dwReadFlags, dwRecordOffset: DWORD;
lpBuffer: LPVOID; nNumberOfBytesToRead: DWORD;
var pnBytesRead, pnMinNumberOfBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM ReadEventLog}
{$ENDIF}

function ReportEventA(hEventLog: HANDLE; wType, wCategory: WORD; dwEventID: DWORD;
lpUserSid: PSID; wNumStrings: WORD; dwDataSize: DWORD; lpStrings: LPCSTR;
lpRawData: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ReportEventA}
function ReportEventW(hEventLog: HANDLE; wType, wCategory: WORD; dwEventID: DWORD;
lpUserSid: PSID; wNumStrings: WORD; dwDataSize: DWORD; lpStrings: LPCWSTR;


lpRawData: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ReportEventW}

{$IFDEF UNICODE}
function ReportEvent(hEventLog: HANDLE; wType, wCategory: WORD; dwEventID: DWORD;
lpUserSid: PSID; wNumStrings: WORD; dwDataSize: DWORD; lpStrings: LPCWSTR;
lpRawData: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ReportEvent}
{$ELSE}
function ReportEvent(hEventLog: HANDLE; wType, wCategory: WORD; dwEventID: DWORD;
lpUserSid: PSID; wNumStrings: WORD; dwDataSize: DWORD; lpStrings: LPCSTR;
lpRawData: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ReportEvent}
{$ENDIF}

const
EVENTLOG_FULL_INFO = 0;
{$EXTERNALSYM EVENTLOG_FULL_INFO}

type
LPEVENTLOG_FULL_INFORMATION = ^EVENTLOG_FULL_INFORMATION;
{$EXTERNALSYM LPEVENTLOG_FULL_INFORMATION}
_EVENTLOG_FULL_INFORMATION = record
dwFull: DWORD;
end;
{$EXTERNALSYM _EVENTLOG_FULL_INFORMATION}
EVENTLOG_FULL_INFORMATION = _EVENTLOG_FULL_INFORMATION;
{$EXTERNALSYM EVENTLOG_FULL_INFORMATION}
TEventlogFullInformation = EVENTLOG_FULL_INFORMATION;
PEventlogFullInformation = LPEVENTLOG_FULL_INFORMATION;

function GetEventLogInformation(hEventLog: HANDLE; dwInfoLevel: DWORD;
lpBuffer: LPVOID; cbBufSize: DWORD; var pcbBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetEventLogInformation}

//
// Security APIs
//

function DuplicateToken(ExistingTokenHandle: HANDLE;
ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL; DuplicateTokenHandle: PHANDLE): BOOL; stdcall;
{$EXTERNALSYM DuplicateToken}

function GetKernelObjectSecurity(Handle: HANDLE;
RequestedInformation: SECURITY_INFORMATION;
pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
var lpnLengthNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetKernelObjectSecurity}

function ImpersonateNamedPipeClient(hNamedPipe: HANDLE): BOOL; stdcall;
{$EXTERNALSYM ImpersonateNamedPipeClient}

function ImpersonateSelf(ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL): BOOL; stdcall;
{$EXTERNALSYM ImpersonateSelf}

function RevertToSelf : BOOL; stdcall;
{$EXTERNALSYM RevertToSelf}

function SetThreadToken(Thread: PHANDLE; Token: HANDLE): BOOL; stdcall;
{$EXTERNALSYM SetThreadToken}

function AccessCheck(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
ClientToken: HANDLE; DesiredAccess: DWORD; const GenericMapping: GENERIC_MAPPING;
var PrivilegeSet: PRIVILEGE_SET; var PrivilegeSetLength,
GrantedAccess: DWORD; var AccessStatus: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheck}

function AccessCheckByType(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
PrincipalSelfSid: PSID; ClientToken: HANDLE; DesiredAccess: DWORD;
ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: GENERIC_MAPPING; var PrivilegeSet: PRIVILEGE_SET;
var PrivilegeSetLength, GrantedAccess: DWORD; var AccessStatus: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByType}

function AccessCheckByTypeResultList(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
PrincipalSelfSid: PSID; ClientToken: HANDLE; DesiredAccess: DWORD;
ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: GENERIC_MAPPING; var PrivilegeSet: PRIVILEGE_SET;
var PrivilegeSetLength, GrantedAccessList: DWORD;
var AccessStatusList: DWORD): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeResultList}

function OpenProcessToken(ProcessHandle: HANDLE; DesiredAccess: DWORD;
var TokenHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM OpenProcessToken}

function OpenThreadToken(ThreadHandle: HANDLE; DesiredAccess: DWORD;
OpenAsSelf: BOOL; var TokenHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM OpenThreadToken}

function GetTokenInformation(TokenHandle: HANDLE;
TokenInformationClass: TOKEN_INFORMATION_CLASS; TokenInformation: LPVOID;
TokenInformationLength: DWORD; var ReturnLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetTokenInformation}

function SetTokenInformation(TokenHandle: HANDLE;
TokenInformationClass: TOKEN_INFORMATION_CLASS; TokenInformation: LPVOID;
TokenInformationLength: DWORD): BOOL; stdcall;

{$EXTERNALSYM SetTokenInformation}

function AdjustTokenPrivileges(TokenHandle: HANDLE; DisableAllPrivileges: BOOL;
NewState: PTOKEN_PRIVILEGES; BufferLength: DWORD;
PreviousState: PTOKEN_PRIVILEGES; ReturnLength: LPDWORD): BOOL; stdcall;
{$EXTERNALSYM AdjustTokenPrivileges}

function AdjustTokenGroups(TokenHandle: HANDLE; ResetToDefault: BOOL;
NewState: PTOKEN_GROUPS; BufferLength: DWORD; PreviousState: PTOKEN_GROUPS;
ReturnLength: PDWORD): BOOL; stdcall;
{$EXTERNALSYM AdjustTokenGroups}

function PrivilegeCheck(ClientToken: HANDLE;
RequiredPrivileges: PPRIVILEGE_SET; var pfResult: BOOL): BOOL; stdcall;
{$EXTERNALSYM PrivilegeCheck}

function AccessCheckAndAuditAlarmA(SubsystemName: LPCSTR; HandleId: LPVOID;
ObjectTypeName, ObjectName: LPSTR; SecurityDescriptor: PSECURITY_DESCRIPTOR;
DesiredAccess: DWORD; const GenericMapping: GENERIC_MAPPING;
ObjectCreation: BOOL; var GrantedAccess: DWORD;
var AccessStatus, pfGenerateOnClose: BOOL): BOOL; stdcall;


{$EXTERNALSYM AccessCheckAndAuditAlarmA}
function AccessCheckAndAuditAlarmW(SubsystemName: LPCWSTR; HandleId: LPVOID;
ObjectTypeName, ObjectName: LPWSTR; SecurityDescriptor: PSECURITY_DESCRIPTOR;
DesiredAccess: DWORD; const GenericMapping: GENERIC_MAPPING;
ObjectCreation: BOOL; var GrantedAccess: DWORD;
var AccessStatus, pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckAndAuditAlarmW}

{$IFDEF UNICODE}
function AccessCheckAndAuditAlarm(SubsystemName: LPCWSTR; HandleId: LPVOID;
ObjectTypeName, ObjectName: LPWSTR; SecurityDescriptor: PSECURITY_DESCRIPTOR;
DesiredAccess: DWORD; const GenericMapping: GENERIC_MAPPING;
ObjectCreation: BOOL; var GrantedAccess: DWORD;
var AccessStatus, pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckAndAuditAlarmA}
{$ELSE}
function AccessCheckAndAuditAlarm(SubsystemName: LPCSTR; HandleId: LPVOID;
ObjectTypeName, ObjectName: LPSTR; SecurityDescriptor: PSECURITY_DESCRIPTOR;
DesiredAccess: DWORD; const GenericMapping: GENERIC_MAPPING;


ObjectCreation: BOOL; var GrantedAccess: DWORD;
var AccessStatus, pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckAndAuditAlarmA}
{$ENDIF}

function AccessCheckByTypeAndAuditAlarmA(SubsystemName: LPCSTR; HandleId: LPVOID;
ObjectTypeName: LPCSTR; ObjectName: LPCSTR; SecurityDescriptor: PSECURITY_DESCRIPTOR;
PrincipalSelfSid: PSID; DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE;
Flags: DWORD; ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
GenericMapping: PGENERIC_MAPPING; ObjectCreation: BOOL; GrantedAccess: LPDWORD;
AccessStatus: LPBOOL; pfGenerateOnClose: LPBOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeAndAuditAlarmA}
function AccessCheckByTypeAndAuditAlarmW(SubsystemName: LPCWSTR; HandleId: LPVOID;
ObjectTypeName: LPCWSTR; ObjectName: LPCWSTR; SecurityDescriptor: PSECURITY_DESCRIPTOR;
PrincipalSelfSid: PSID; DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE;
Flags: DWORD; ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;

GenericMapping: PGENERIC_MAPPING; ObjectCreation: BOOL; GrantedAccess: LPDWORD;
AccessStatus: LPBOOL; pfGenerateOnClose: LPBOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeAndAuditAlarmW}

{$IFDEF UNICODE}
function AccessCheckByTypeAndAuditAlarm(SubsystemName: LPCWSTR; HandleId: LPVOID;
ObjectTypeName, ObjectName: LPCWSTR; SecurityDescriptor: PSECURITY_DESCRIPTOR;
PrincipalSelfSid: PSID; DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE;
Flags: DWORD; ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: GENERIC_MAPPING; ObjectCreation: BOOL;
var GrantedAccess: DWORD; var AccessStatus, pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeAndAuditAlarmA}
{$ELSE}
function AccessCheckByTypeAndAuditAlarm(SubsystemName: LPCSTR; HandleId: LPVOID;
ObjectTypeName, ObjectName: LPCSTR; SecurityDescriptor: PSECURITY_DESCRIPTOR;
PrincipalSelfSid: PSID; DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE;
Flags: DWORD; ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;


const GenericMapping: GENERIC_MAPPING; ObjectCreation: BOOL;
var GrantedAccess: DWORD; var AccessStatus, pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeAndAuditAlarmA}
{$ENDIF}

function AccessCheckByTypeResultListAndAuditAlarmA(SubsystemName: LPCSTR;
HandleId: LPVOID; ObjectTypeName, ObjectName: LPCSTR;
SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID;
DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE; Flags: DWORD;
ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: GENERIC_MAPPING; ObjectCreation: BOOL;
var GrantedAccess, AccessStatusList: DWORD; var pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeResultListAndAuditAlarmA}
function AccessCheckByTypeResultListAndAuditAlarmW(SubsystemName: LPCWSTR;
HandleId: LPVOID; ObjectTypeName, ObjectName: LPCWSTR;
SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID;
DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE; Flags: DWORD;


ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: GENERIC_MAPPING; ObjectCreation: BOOL;
var GrantedAccess, AccessStatusList: DWORD; var pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeResultListAndAuditAlarmW}

{$IFDEF UNICODE}
function AccessCheckByTypeResultListAndAuditAlarm(SubsystemName: LPCWSTR;
HandleId: LPVOID; ObjectTypeName, ObjectName: LPCWSTR;
SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID;
DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE; Flags: DWORD;
ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: GENERIC_MAPPING; ObjectCreation: BOOL;
var GrantedAccess, AccessStatusList: DWORD; var pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeResultListAndAuditAlarmA}
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarm(SubsystemName: LPCSTR;
HandleId: LPVOID; ObjectTypeName, ObjectName: LPCSTR;
SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID;
DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE; Flags: DWORD;
ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: GENERIC_MAPPING; ObjectCreation: BOOL;
var GrantedAccess, AccessStatusList: DWORD; var pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeResultListAndAuditAlarmA}
{$ENDIF}

function AccessCheckByTypeResultListAndAuditAlarmByHandleA(SubsystemName: LPCSTR;
HandleId: LPVOID; ClientToken: HANDLE; ObjectTypeName, ObjectName: LPCSTR;
SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID;
DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE; Flags: DWORD;
ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: GENERIC_MAPPING; ObjectCreation: BOOL;
var GrantedAccess, AccessStatusList: DWORD; var pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeResultListAndAuditAlarmByHandleA}
function AccessCheckByTypeResultListAndAuditAlarmByHandleW(SubsystemName: LPCWSTR;
HandleId: LPVOID; ClientToken: HANDLE; ObjectTypeName, ObjectName: LPCWSTR;
SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID;
DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE; Flags: DWORD;
ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: PGENERIC_MAPPING; ObjectCreation: BOOL;
var GrantedAccess, AccessStatusList: DWORD; var pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeResultListAndAuditAlarmByHandleW}

{$IFDEF UNICODE}
function AccessCheckByTypeResultListAndAuditAlarmByHandle(SubsystemName: LPCWSTR;
HandleId: LPVOID; ClientToken: HANDLE; ObjectTypeName, ObjectName: LPCWSTR;
SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID;
DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE; Flags: DWORD;
ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: PGENERIC_MAPPING; ObjectCreation: BOOL;

var GrantedAccess, AccessStatusList: DWORD; var pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeResultListAndAuditAlarmByHandle}
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarmByHandle(SubsystemName: LPCSTR;
HandleId: LPVOID; ClientToken: HANDLE; ObjectTypeName, ObjectName: LPCSTR;
SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID;
DesiredAccess: DWORD; AuditType: AUDIT_EVENT_TYPE; Flags: DWORD;
ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: DWORD;
const GenericMapping: GENERIC_MAPPING; ObjectCreation: BOOL;
var GrantedAccess, AccessStatusList: DWORD; var pfGenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM AccessCheckByTypeResultListAndAuditAlarmByHandleA}
{$ENDIF}

function ObjectOpenAuditAlarmA(SubsystemName: LPCSTR; HandleId: LPVOID;
ObjectTypeName: LPSTR; ObjectName: LPSTR; pSecurityDescriptor: PSECURITY_DESCRIPTOR;
ClientToken: HANDLE; DesiredAccess, GrantedAccess: DWORD;
Privileges: PPRIVILEGE_SET; ObjectCreation: BOOL; AccessGranted: BOOL;


var GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectOpenAuditAlarmA}
function ObjectOpenAuditAlarmW(SubsystemName: LPCWSTR; HandleId: LPVOID;
ObjectTypeName, ObjectName: LPWSTR; pSecurityDescriptor: PSECURITY_DESCRIPTOR;
ClientToken: HANDLE; DesiredAccess: DWORD; GrantedAccess: DWORD;
Privileges: PPRIVILEGE_SET; ObjectCreation: BOOL; AccessGranted: BOOL;
var GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectOpenAuditAlarmW}

{$IFDEF UNICODE}
function ObjectOpenAuditAlarm(SubsystemName: LPCWSTR; HandleId: LPVOID;
ObjectTypeName: LPWSTR; ObjectName: LPWSTR; pSecurityDescriptor: PSECURITY_DESCRIPTOR;
ClientToken: HANDLE; DesiredAccess: DWORD; GrantedAccess: DWORD;
Privileges: PPRIVILEGE_SET; ObjectCreation: BOOL; AccessGranted: BOOL;
var GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectOpenAuditAlarmA}
{$ELSE}
function ObjectOpenAuditAlarm(SubsystemName: LPCSTR; HandleId: LPVOID;
ObjectTypeName: LPSTR; ObjectName: LPSTR; pSecurityDescriptor: PSECURITY_DESCRIPTOR;


ClientToken: HANDLE; DesiredAccess: DWORD; GrantedAccess: DWORD;
Privileges: PPRIVILEGE_SET; ObjectCreation: BOOL; AccessGranted: BOOL;
var GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectOpenAuditAlarmA}
{$ENDIF}

function ObjectPrivilegeAuditAlarmA(SubsystemName: LPCSTR; HandleId: LPVOID;
ClientToken: HANDLE; DesiredAccess: DWORD; const Privileges: PRIVILEGE_SET;
AccessGranted: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectPrivilegeAuditAlarmA}
function ObjectPrivilegeAuditAlarmW(SubsystemName: LPCWSTR; HandleId: LPVOID;
ClientToken: HANDLE; DesiredAccess: DWORD; const Privileges: PRIVILEGE_SET;
AccessGranted: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectPrivilegeAuditAlarmW}

{$IFDEF UNICODE}
function ObjectPrivilegeAuditAlarm(SubsystemName: LPCWSTR; HandleId: LPVOID;
ClientToken: HANDLE; DesiredAccess: DWORD; const Privileges: PRIVILEGE_SET;
AccessGranted: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectPrivilegeAuditAlarmA}
{$ELSE}

function ObjectPrivilegeAuditAlarm(SubsystemName: LPCSTR; HandleId: LPVOID;
ClientToken: HANDLE; DesiredAccess: DWORD; const Privileges: PRIVILEGE_SET;
AccessGranted: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectPrivilegeAuditAlarmA}
{$ENDIF}

function ObjectCloseAuditAlarmA(SubsystemName: LPCSTR; HandleId: LPVOID;
GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectCloseAuditAlarmA}
function ObjectCloseAuditAlarmW(SubsystemName: LPCWSTR; HandleId: LPVOID;
GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectCloseAuditAlarmW}

{$IFDEF UNICODE}
function ObjectCloseAuditAlarm(SubsystemName: LPCWSTR; HandleId: LPVOID;
GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectCloseAuditAlarmA}
{$ELSE}
function ObjectCloseAuditAlarm(SubsystemName: LPCSTR; HandleId: LPVOID;
GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectCloseAuditAlarmA}
{$ENDIF}

function ObjectDeleteAuditAlarmA(SubsystemName: LPCSTR; HandleId: LPVOID;
GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectDeleteAuditAlarmA}
function ObjectDeleteAuditAlarmW(SubsystemName: LPCWSTR; HandleId: LPVOID;
GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectDeleteAuditAlarmW}

{$IFDEF UNICODE}
function ObjectDeleteAuditAlarm(SubsystemName: LPCWSTR; HandleId: LPVOID;
GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectDeleteAuditAlarmA}
{$ELSE}
function ObjectDeleteAuditAlarm(SubsystemName: LPCSTR; HandleId: LPVOID;
GenerateOnClose: BOOL): BOOL; stdcall;
{$EXTERNALSYM ObjectDeleteAuditAlarmA}
{$ENDIF}

function PrivilegedServiceAuditAlarmA(SubsystemName, ServiceName: LPCSTR;
ClientToken: HANDLE; const Privileges: PRIVILEGE_SET; AccessGranted: BOOL): BOOL; stdcall;
{$EXTERNALSYM PrivilegedServiceAuditAlarmA}
function PrivilegedServiceAuditAlarmW(SubsystemName, ServiceName: LPCWSTR;
ClientToken: HANDLE; const Privileges: PRIVILEGE_SET; AccessGranted: BOOL): BOOL; stdcall;
{$EXTERNALSYM PrivilegedServiceAuditAlarmW}

{$IFDEF UNICODE}
function PrivilegedServiceAuditAlarm(SubsystemName, ServiceName: LPCWSTR;
ClientToken: HANDLE; const Privileges: PRIVILEGE_SET; AccessGranted: BOOL): BOOL; stdcall;
{$EXTERNALSYM PrivilegedServiceAuditAlarmA}
{$ELSE}
function PrivilegedServiceAuditAlarm(SubsystemName, ServiceName: LPCSTR;
ClientToken: HANDLE; const Privileges: PRIVILEGE_SET; AccessGranted: BOOL): BOOL; stdcall;
{$EXTERNALSYM PrivilegedServiceAuditAlarmA}
{$ENDIF}

function IsWellKnownSid(pSid: PSID; WellKnownSidType: WELL_KNOWN_SID_TYPE): BOOL; stdcall;
{$EXTERNALSYM IsWellKnownSid}

function CreateWellKnownSid(WellKnownSidType: WELL_KNOWN_SID_TYPE; DomainSid: PSID;
pSid: PSID; var cbSid: DWORD): BOOL; stdcall;
{$EXTERNALSYM CreateWellKnownSid}

function EqualDomainSid(pSid1, pSid2: PSID; pfEqual: PBOOL): BOOL; stdcall;
{$EXTERNALSYM EqualDomainSid}

function GetWindowsAccountDomainSid(pSid, ppDomainSid: PSID; var cbSid: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetWindowsAccountDomainSid}



function IsValidSid(pSid: PSID): BOOL; stdcall;
{$EXTERNALSYM IsValidSid}

function EqualSid(pSid1, pSid2: PSID): BOOL; stdcall;
{$EXTERNALSYM EqualSid}

function EqualPrefixSid(pSid1, pSid2: PSID): BOOL; stdcall;
{$EXTERNALSYM EqualPrefixSid}

function GetSidLengthRequired(nSubAuthorityCount: UCHAR): DWORD; stdcall;
{$EXTERNALSYM GetSidLengthRequired}

function AllocateAndInitializeSid(pIdentifierAuthority: PSID_IDENTIFIER_AUTHORITY;
SubAuthorityCount: BYTE; nSubAuthority0, nSubAuthority1, nSubAuthority2,
nSubAuthority3, nSubAuthority4, nSubAuthority5, nSubAuthority6,
nSubAuthority7: DWORD; var pSid: PSID): BOOL; stdcall;
{$EXTERNALSYM AllocateAndInitializeSid}

function FreeSid(pSid: PSID): PVOID; stdcall;
{$EXTERNALSYM FreeSid}

function InitializeSid(Sid: PSID; pIdentifierAuthority: PSID_IDENTIFIER_AUTHORITY;
nSubAuthorityCount: BYTE): BOOL; stdcall;
{$EXTERNALSYM InitializeSid}

function GetSidIdentifierAuthority(pSid: PSID): PSID_IDENTIFIER_AUTHORITY; stdcall;


{$EXTERNALSYM GetSidIdentifierAuthority}

function GetSidSubAuthority(pSid: PSID; nSubAuthority: DWORD): PDWORD; stdcall;
{$EXTERNALSYM GetSidSubAuthority}

function GetSidSubAuthorityCount(pSid: PSID): PUCHAR; stdcall;
{$EXTERNALSYM GetSidSubAuthorityCount}

function GetLengthSid(pSid: PSID): DWORD; stdcall;
{$EXTERNALSYM GetLengthSid}

function CopySid(nDestinationSidLength: DWORD; pDestinationSid: PSID;
pSourceSid: PSID): BOOL; stdcall;
{$EXTERNALSYM CopySid}

function AreAllAccessesGranted(GrantedAccess, DesiredAccess: DWORD): BOOL; stdcall;
{$EXTERNALSYM AreAllAccessesGranted}

function AreAnyAccessesGranted(GrantedAccess, DesiredAccess: DWORD): BOOL; stdcall;
{$EXTERNALSYM AreAnyAccessesGranted}

procedure MapGenericMask(var AccessMask: DWORD; var GenericMapping: GENERIC_MAPPING); stdcall;
{$EXTERNALSYM MapGenericMask}

function IsValidAcl(pAcl: PACL): BOOL; stdcall;
{$EXTERNALSYM IsValidAcl}

function InitializeAcl(pAcl: PACL; nAclLength: DWORD; dwAclRevision: DWORD): BOOL; stdcall;
{$EXTERNALSYM InitializeAcl}

function GetAclInformation(pAcl: PACL; pAclInformation: LPVOID;
nAclInformationLength: DWORD; dwAclInformationClass: ACL_INFORMATION_CLASS): BOOL; stdcall;
{$EXTERNALSYM GetAclInformation}

function SetAclInformation(pAcl: PACL; pAclInformation: LPVOID;
nAclInformationLength: DWORD; dwAclInformationClass: ACL_INFORMATION_CLASS): BOOL; stdcall;
{$EXTERNALSYM SetAclInformation}

function AddAce(pAcl: PACL; dwAceRevision: DWORD; dwStartingAceIndex: DWORD;
pAceList: LPVOID; nAceListLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM AddAce}

function DeleteAce(pAcl: PACL; dwAceIndex: DWORD): BOOL; stdcall;
{$EXTERNALSYM DeleteAce}

function GetAce(pAcl: PACL; dwAceIndex: DWORD; var pAce: LPVOID): BOOL; stdcall;
{$EXTERNALSYM GetAce}

function AddAccessAllowedAce(pAcl: PACL; dwAceRevision, AccessMask: DWORD; pSid: PSID): BOOL; stdcall;
{$EXTERNALSYM AddAccessAllowedAce}

function AddAccessAllowedAceEx(pAcl: PACL; dwAceRevision, AceFlags,

AccessMask: DWORD; pSid: PSID): BOOL; stdcall;
{$EXTERNALSYM AddAccessAllowedAceEx}

function AddAccessDeniedAce(pAcl: PACL; dwAceRevision, AccessMask: DWORD; pSid: PSID): BOOL; stdcall;
{$EXTERNALSYM AddAccessDeniedAce}

function AddAccessDeniedAceEx(pAcl: PACL; dwAceRevision, AceFlags: DWORD;
AccessMask: DWORD; pSid: PSID): BOOL; stdcall;
{$EXTERNALSYM AddAccessDeniedAceEx}

function AddAuditAccessAce(pAcl: PACL; dwAceRevision, dwAccessMask: DWORD;
pSid: PSID; bAuditSuccess, bAuditFailure: BOOL): BOOL; stdcall;
{$EXTERNALSYM AddAuditAccessAce}

function AddAuditAccessAceEx(pAcl: PACL; dwAceRevision, AceFlags,
dwAccessMask: DWORD; pSid: PSID; bAuditSuccess, bAuditFailure: BOOL): BOOL; stdcall;
{$EXTERNALSYM AddAuditAccessAceEx}

function AddAccessAllowedObjectAce(pAcl: PACL; dwAceRevision, AceFlags,
AccessMask: DWORD; ObjectTypeGuid, InheritedObjectTypeGuid: LPGUID; pSid: PSID): BOOL; stdcall;
{$EXTERNALSYM AddAccessAllowedObjectAce}

function AddAccessDeniedObjectAce(pAcl: PACL; dwAceRevision, AceFlags,
AccessMask: DWORD; ObjectTypeGuid, InheritedObjectTypeGuid: LPGUID; pSid: PSID): BOOL; stdcall;
{$EXTERNALSYM AddAccessDeniedObjectAce}

function AddAuditAccessObjectAce(pAcl: PACL; dwAceRevision, AceFlags,
AccessMask: DWORD; ObjectTypeGuid, InheritedObjectTypeGuid: LPGUID; pSid: PSID;
bAuditSuccess, bAuditFailure: BOOL): BOOL; stdcall;
{$EXTERNALSYM AddAuditAccessObjectAce}

function FindFirstFreeAce(pAcl: PACL; var pAce: LPVOID): BOOL; stdcall;
{$EXTERNALSYM FindFirstFreeAce}

function InitializeSecurityDescriptor(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
dwRevision: DWORD): BOOL; stdcall;
{$EXTERNALSYM InitializeSecurityDescriptor}

function IsValidSecurityDescriptor(pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
{$EXTERNALSYM IsValidSecurityDescriptor}

function GetSecurityDescriptorLength(pSecurityDescriptor: PSECURITY_DESCRIPTOR): DWORD; stdcall;
{$EXTERNALSYM GetSecurityDescriptorLength}


function GetSecurityDescriptorControl(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
var pControl: SECURITY_DESCRIPTOR_CONTROL; var lpdwRevision: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetSecurityDescriptorControl}

function SetSecurityDescriptorControl(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
ControlBitsOfInterest, ControlBitsToSet: SECURITY_DESCRIPTOR_CONTROL): BOOL; stdcall;
{$EXTERNALSYM SetSecurityDescriptorControl}

function SetSecurityDescriptorDacl(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
bDaclPresent: BOOL; pDacl: PACL; bDaclDefaulted: BOOL): BOOL; stdcall;
{$EXTERNALSYM SetSecurityDescriptorDacl}

function GetSecurityDescriptorDacl(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
var lpbDaclPresent: BOOL; var pDacl: PACL; var lpbDaclDefaulted: BOOL): BOOL; stdcall;
{$EXTERNALSYM GetSecurityDescriptorDacl}

function SetSecurityDescriptorSacl(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
bSaclPresent: BOOL; pSacl: PACL; bSaclDefaulted: BOOL): BOOL; stdcall;


{$EXTERNALSYM SetSecurityDescriptorSacl}

function GetSecurityDescriptorSacl(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
var lpbSaclPresent: BOOL; var pSacl: PACL; var lpbSaclDefaulted: BOOL): BOOL; stdcall;
{$EXTERNALSYM GetSecurityDescriptorSacl}

function SetSecurityDescriptorOwner(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
pOwner: PSID; bOwnerDefaulted: BOOL): BOOL; stdcall;
{$EXTERNALSYM SetSecurityDescriptorOwner}

function GetSecurityDescriptorOwner(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
var pOwner: PSID; lpbOwnerDefaulted: PBOOL): BOOL; stdcall;
{$EXTERNALSYM GetSecurityDescriptorOwner}

function SetSecurityDescriptorGroup(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
pGroup: PSID; bGroupDefaulted: BOOL): BOOL; stdcall;
{$EXTERNALSYM SetSecurityDescriptorGroup}

function GetSecurityDescriptorGroup(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
var pGroup: PSID; lpbGroupDefaulted: PBOOL): BOOL; stdcall;
{$EXTERNALSYM GetSecurityDescriptorGroup}

function SetSecurityDescriptorRMControl(SecurityDescriptor: PSECURITY_DESCRIPTOR;
RMControl: PUCHAR): DWORD; stdcall;
{$EXTERNALSYM SetSecurityDescriptorRMControl}

function GetSecurityDescriptorRMControl(SecurityDescriptor: PSECURITY_DESCRIPTOR;
var RMControl: UCHAR): DWORD; stdcall;
{$EXTERNALSYM GetSecurityDescriptorRMControl}

function CreatePrivateObjectSecurity(ParentDescriptor, CreatorDescriptor: PSECURITY_DESCRIPTOR;
var NewDescriptor: PSECURITY_DESCRIPTOR; IsDirectoryObject: BOOL; Token: HANDLE;
const GenericMapping: GENERIC_MAPPING): BOOL; stdcall;
{$EXTERNALSYM CreatePrivateObjectSecurity}

function ConvertToAutoInheritPrivateObjectSecurity(ParentDescriptor,
CurrentSecurityDescriptor: PSECURITY_DESCRIPTOR;
var NewSecurityDescriptor: PSECURITY_DESCRIPTOR; ObjectType: LPGUID;
IsDirectoryObject: ByteBool; const GenericMapping: GENERIC_MAPPING): BOOL; stdcall;
{$EXTERNALSYM ConvertToAutoInheritPrivateObjectSecurity}

function CreatePrivateObjectSecurityEx(ParentDescriptor,
CreatorDescriptor: PSECURITY_DESCRIPTOR;
var NewDescriptor: PSECURITY_DESCRIPTOR; ObjectType: LPGUID;
IsContainerObject: BOOL; AutoInheritFlags: ULONG; Token: HANDLE;
const GenericMapping: GENERIC_MAPPING): BOOL; stdcall;
{$EXTERNALSYM CreatePrivateObjectSecurityEx}

function SetPrivateObjectSecurity(SecurityInformation: SECURITY_INFORMATION;
ModificationDescriptor: PSECURITY_DESCRIPTOR;
var ObjectsSecurityDescriptor: PSECURITY_DESCRIPTOR;
const GenericMapping: GENERIC_MAPPING; Token: HANDLE): BOOL; stdcall;
{$EXTERNALSYM SetPrivateObjectSecurity}

function SetPrivateObjectSecurityEx(SecurityInformation: SECURITY_INFORMATION;
ModificationDescriptor: PSECURITY_DESCRIPTOR;
var ObjectsSecurityDescriptor: PSECURITY_DESCRIPTOR; AutoInheritFlags: ULONG;
const GenericMapping: GENERIC_MAPPING; Token: HANDLE): BOOL; stdcall;
{$EXTERNALSYM SetPrivateObjectSecurityEx}

function GetPrivateObjectSecurity(ObjectDescriptor: PSECURITY_DESCRIPTOR;
SecurityInformation: SECURITY_INFORMATION;


ResultantDescriptor: PSECURITY_DESCRIPTOR; DescriptorLength: DWORD;
var ReturnLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetPrivateObjectSecurity}

function DestroyPrivateObjectSecurity(var ObjectDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
{$EXTERNALSYM DestroyPrivateObjectSecurity}

function MakeSelfRelativeSD(pAbsoluteSecurityDescriptor: PSECURITY_DESCRIPTOR;
pSelfRelativeSecurityDescriptor: PSECURITY_DESCRIPTOR; var lpdwBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM MakeSelfRelativeSD}

function MakeAbsoluteSD(pSelfRelativeSecurityDescriptor: PSECURITY_DESCRIPTOR;
pAbsoluteSecurityDescriptor: PSECURITY_DESCRIPTOR;
var lpdwAbsoluteSecurityDescriptorSize: DWORD; pDacl: PACL;
var lpdwDaclSize: DWORD; pSacl: PACL; var lpdwSaclSize: DWORD; pOwner: PSID;
var lpdwOwnerSize: DWORD; pPrimaryGroup: PSID; var lpdwPrimaryGroupSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM MakeAbsoluteSD}

function MakeAbsoluteSD2(pSelfRelativeSecurityDescriptor: PSECURITY_DESCRIPTOR;

var lpdwBufferSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM MakeAbsoluteSD2}

function SetFileSecurityA(lpFileName: LPCSTR; SecurityInformation: SECURITY_INFORMATION;
pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
{$EXTERNALSYM SetFileSecurityA}
function SetFileSecurityW(lpFileName: LPCWSTR; SecurityInformation: SECURITY_INFORMATION;
pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
{$EXTERNALSYM SetFileSecurityW}

{$IFDEF UNICODE}
function SetFileSecurity(lpFileName: LPCWSTR; SecurityInformation: SECURITY_INFORMATION;
pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
{$EXTERNALSYM SetFileSecurityA}
{$ELSE}
function SetFileSecurity(lpFileName: LPCSTR; SecurityInformation: SECURITY_INFORMATION;
pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
{$EXTERNALSYM SetFileSecurityA}
{$ENDIF}

function GetFileSecurityA(lpFileName: LPCSTR; RequestedInformation: SECURITY_INFORMATION;
pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;


var lpnLengthNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetFileSecurityA}
function GetFileSecurityW(lpFileName: LPCWSTR; RequestedInformation: SECURITY_INFORMATION;
pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
var lpnLengthNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetFileSecurityW}

{$IFDEF UNICODE}
function GetFileSecurity(lpFileName: LPCWSTR; RequestedInformation: SECURITY_INFORMATION;
pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
var lpnLengthNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetFileSecurityA}
{$ELSE}
function GetFileSecurity(lpFileName: LPCSTR; RequestedInformation: SECURITY_INFORMATION;
pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
var lpnLengthNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetFileSecurityA}
{$ENDIF}

function SetKernelObjectSecurity(Handle: HANDLE; SecurityInformation: SECURITY_INFORMATION;
SecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
{$EXTERNALSYM SetKernelObjectSecurity}


function FindFirstChangeNotificationA(lpPathName: LPCSTR; bWatchSubtree: Cardinal;
dwNotifyFilter: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstChangeNotificationA}
function FindFirstChangeNotificationW(lpPathName: LPCWSTR; bWatchSubtree: Cardinal;
dwNotifyFilter: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstChangeNotificationW}

{$IFDEF UNICODE}
function FindFirstChangeNotification(lpPathName: LPCWSTR; bWatchSubtree: Cardinal;
dwNotifyFilter: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstChangeNotification}
{$ELSE}
function FindFirstChangeNotification(lpPathName: LPCSTR; bWatchSubtree: Cardinal;
dwNotifyFilter: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstChangeNotification}
{$ENDIF}

function FindNextChangeNotification(hChangeHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM FindNextChangeNotification}

function FindCloseChangeNotification(hChangeHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM FindCloseChangeNotification}


function ReadDirectoryChangesW(hDirectory: HANDLE; lpBuffer: LPVOID;
nBufferLength: DWORD; bWatchSubtree: BOOL; dwNotifyFilter: DWORD;
lpBytesReturned: LPDWORD; lpOverlapped: LPOVERLAPPED;
lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE): BOOL; stdcall;
{$EXTERNALSYM ReadDirectoryChangesW}

function VirtualLock(lpAddress: LPVOID; dwSize: SIZE_T): BOOL; stdcall;
{$EXTERNALSYM VirtualLock}

function VirtualUnlock(lpAddress: LPVOID; dwSize: SIZE_T): BOOL; stdcall;
{$EXTERNALSYM VirtualUnlock}

function MapViewOfFileEx(hFileMappingObject: HANDLE; dwDesiredAccess: DWORD;
dwFileOffsetHigh: DWORD; dwFileOffsetLow: DWORD; dwNumberOfBytesToMap: SIZE_T;
lpBaseAddress: LPVOID): LPVOID; stdcall;
{$EXTERNALSYM MapViewOfFileEx}

function SetPriorityClass(hProcess: HANDLE; dwPriorityClass: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetPriorityClass}

function GetPriorityClass(hProcess: HANDLE): DWORD; stdcall;
{$EXTERNALSYM GetPriorityClass}

function IsBadReadPtr(lp: LPVOID; ucb: UINT_PTR): BOOL; stdcall;


{$EXTERNALSYM IsBadReadPtr}

function IsBadWritePtr(lp: LPVOID; ucb: UINT_PTR): BOOL; stdcall;
{$EXTERNALSYM IsBadWritePtr}

function IsBadHugeReadPtr(lp: LPVOID; ucb: UINT_PTR): BOOL; stdcall;
{$EXTERNALSYM IsBadHugeReadPtr}

function IsBadHugeWritePtr(lp: LPVOID; ucb: UINT_PTR): BOOL; stdcall;
{$EXTERNALSYM IsBadHugeWritePtr}

function IsBadCodePtr(lpfn: FARPROC): BOOL; stdcall;
{$EXTERNALSYM IsBadCodePtr}

function IsBadStringPtrA(lpsz: LPCSTR; ucchMax: UINT_PTR): BOOL; stdcall;
{$EXTERNALSYM IsBadStringPtrA}
function IsBadStringPtrW(lpsz: LPCWSTR; ucchMax: UINT_PTR): BOOL; stdcall;
{$EXTERNALSYM IsBadStringPtrW}

{$IFDEF UNICODE}
function IsBadStringPtr(lpsz: LPCWSTR; ucchMax: UINT_PTR): BOOL; stdcall;
{$EXTERNALSYM IsBadStringPtr}
{$ELSE}
function IsBadStringPtr(lpsz: LPCSTR; ucchMax: UINT_PTR): BOOL; stdcall;
{$EXTERNALSYM IsBadStringPtr}
{$ENDIF}

function LookupAccountSidA(lpSystemName: LPCSTR; Sid: PSID; Name: LPSTR;
var cbName: DWORD; ReferencedDomainName: LPSTR; var cbReferencedDomainName: DWORD;

var peUse: SID_NAME_USE): BOOL; stdcall;
{$EXTERNALSYM LookupAccountSidA}
function LookupAccountSidW(lpSystemName: LPCWSTR; Sid: PSID; Name: LPWSTR;
var cbName: DWORD; ReferencedDomainName: LPWSTR; var cbReferencedDomainName: DWORD;
var peUse: SID_NAME_USE): BOOL; stdcall;
{$EXTERNALSYM LookupAccountSidW}

{$IFDEF UNICODE}
function LookupAccountSid(lpSystemName: LPCWSTR; Sid: PSID; Name: LPWSTR;
var cbName: DWORD; ReferencedDomainName: LPWSTR; var cbReferencedDomainName: DWORD;
var peUse: SID_NAME_USE): BOOL; stdcall;
{$EXTERNALSYM LookupAccountSid}
{$ELSE}
function LookupAccountSid(lpSystemName: LPCSTR; Sid: PSID; Name: LPSTR;
var cbName: DWORD; ReferencedDomainName: LPSTR; var cbReferencedDomainName: DWORD;
var peUse: SID_NAME_USE): BOOL; stdcall;
{$EXTERNALSYM LookupAccountSid}
{$ENDIF}

function LookupAccountNameA(lpSystemName, lpAccountName: LPCSTR; Sid: PSID;
var cbSid: DWORD; ReferencedDomainName: LPSTR; var cbReferencedDomainName: DWORD;


var peUse: SID_NAME_USE): BOOL; stdcall;
{$EXTERNALSYM LookupAccountNameA}
function LookupAccountNameW(lpSystemName, lpAccountName: LPCWSTR; Sid: PSID;
var cbSid: DWORD; ReferencedDomainName: LPWSTR; var cbReferencedDomainName: DWORD;
var peUse: SID_NAME_USE): BOOL; stdcall;
{$EXTERNALSYM LookupAccountNameW}

{$IFDEF UNICODE}
function LookupAccountName(lpSystemName: LPCWSTR; lpAccountName: LPCWSTR; Sid: PSID;
var cbSid: DWORD; ReferencedDomainName: LPWSTR; var cbReferencedDomainName: DWORD;
var peUse: SID_NAME_USE): BOOL; stdcall;
{$EXTERNALSYM LookupAccountName}
{$ELSE}
function LookupAccountName(lpSystemName: LPCSTR; lpAccountName: LPCSTR; Sid: PSID;
var cbSid: DWORD; ReferencedDomainName: LPSTR; var cbReferencedDomainName: DWORD;
var peUse: SID_NAME_USE): BOOL; stdcall;
{$EXTERNALSYM LookupAccountName}
{$ENDIF}

function LookupPrivilegeValueA(lpSystemName, lpName: LPCSTR; var lpLuid: LUID): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeValueA}


function LookupPrivilegeValueW(lpSystemName, lpName: LPCWSTR; var lpLuid: LUID): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeValueW}

{$IFDEF UNICODE}
function LookupPrivilegeValue(lpSystemName, lpName: LPCWSTR; var lpLuid: LUID): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeValue}
{$ELSE}
function LookupPrivilegeValue(lpSystemName, lpName: LPCSTR; var lpLuid: LUID): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeValue}
{$ENDIF}

function LookupPrivilegeNameA(lpSystemName: LPCSTR; const lpLuid: LUID;
lpName: LPSTR; var cbName: DWORD): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeNameA}
function LookupPrivilegeNameW(lpSystemName: LPCWSTR; const lpLuid: LUID;
lpName: LPWSTR; var cbName: DWORD): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeNameW}

{$IFDEF UNICODE}
function LookupPrivilegeName(lpSystemName: LPCWSTR; const lpLuid: LUID;
lpName: LPWSTR; var cbName: DWORD): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeName}
{$ELSE}
function LookupPrivilegeName(lpSystemName: LPCSTR; const lpLuid: LUID;
lpName: LPSTR; var cbName: DWORD): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeName}
{$ENDIF}

function LookupPrivilegeDisplayNameA(lpSystemName, lpName: LPCSTR;
lpDisplayName: LPSTR; var cbDisplayName, lpLanguageId: DWORD): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeDisplayNameA}
function LookupPrivilegeDisplayNameW(lpSystemName, lpName: LPCWSTR;
lpDisplayName: LPWSTR; var cbDisplayName, lpLanguageId: DWORD): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeDisplayNameW}

{$IFDEF UNICODE}
function LookupPrivilegeDisplayName(lpSystemName, lpName: LPCWSTR;
lpDisplayName: LPWSTR; var cbDisplayName, lpLanguageId: DWORD): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeDisplayName}
{$ELSE}
function LookupPrivilegeDisplayName(lpSystemName, lpName: LPCSTR;
lpDisplayName: LPSTR; var cbDisplayName, lpLanguageId: DWORD): BOOL; stdcall;
{$EXTERNALSYM LookupPrivilegeDisplayName}
{$ENDIF}

function AllocateLocallyUniqueId(var Luid: LUID): BOOL; stdcall;
{$EXTERNALSYM AllocateLocallyUniqueId}


function BuildCommDCBA(lpDef: LPCSTR; var lpDCB: DCB): BOOL; stdcall;
{$EXTERNALSYM BuildCommDCBA}
function BuildCommDCBW(lpDef: LPCWSTR; var lpDCB: DCB): BOOL; stdcall;
{$EXTERNALSYM BuildCommDCBW}

{$IFDEF UNICODE}
function BuildCommDCB(lpDef: LPCWSTR; var lpDCB: DCB): BOOL; stdcall;
{$EXTERNALSYM BuildCommDCB}
{$ELSE}
function BuildCommDCB(lpDef: LPCSTR; var lpDCB: DCB): BOOL; stdcall;
{$EXTERNALSYM BuildCommDCB}
{$ENDIF}

function BuildCommDCBAndTimeoutsA(lpDef: LPCSTR; var lpDCB: DCB;
var lpCommTimeouts: COMMTIMEOUTS): BOOL; stdcall;
{$EXTERNALSYM BuildCommDCBAndTimeoutsA}
function BuildCommDCBAndTimeoutsW(lpDef: LPCWSTR; var lpDCB: DCB;
var lpCommTimeouts: COMMTIMEOUTS): BOOL; stdcall;
{$EXTERNALSYM BuildCommDCBAndTimeoutsW}

{$IFDEF UNICODE}
function BuildCommDCBAndTimeouts(lpDef: LPCWSTR; var lpDCB: DCB;
var lpCommTimeouts: COMMTIMEOUTS): BOOL; stdcall;
{$EXTERNALSYM BuildCommDCBAndTimeouts}
{$ELSE}
function BuildCommDCBAndTimeouts(lpDef: LPCSTR; var lpDCB: DCB;
var lpCommTimeouts: COMMTIMEOUTS): BOOL; stdcall;
{$EXTERNALSYM BuildCommDCBAndTimeouts}
{$ENDIF}

function CommConfigDialogA(lpszName: LPCSTR; hWnd: HWND; var lpCC: COMMCONFIG): BOOL; stdcall;
{$EXTERNALSYM CommConfigDialogA}
function CommConfigDialogW(lpszName: LPCWSTR; hWnd: HWND; var lpCC: COMMCONFIG): BOOL; stdcall;
{$EXTERNALSYM CommConfigDialogW}

{$IFDEF UNICODE}
function CommConfigDialog(lpszName: LPCWSTR; hWnd: HWND; var lpCC: COMMCONFIG): BOOL; stdcall;
{$EXTERNALSYM CommConfigDialog}
{$ELSE}
function CommConfigDialog(lpszName: LPCSTR; hWnd: HWND; var lpCC: COMMCONFIG): BOOL; stdcall;
{$EXTERNALSYM CommConfigDialog}
{$ENDIF}

function GetDefaultCommConfigA(lpszName: LPCSTR; var lpCC: COMMCONFIG;
var lpdwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetDefaultCommConfigA}
function GetDefaultCommConfigW(lpszName: LPCWSTR; var lpCC: COMMCONFIG;
var lpdwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetDefaultCommConfigW}

{$IFDEF UNICODE}
function GetDefaultCommConfig(lpszName: LPCWSTR; var lpCC: COMMCONFIG;
var lpdwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetDefaultCommConfig}
{$ELSE}
function GetDefaultCommConfig(lpszName: LPCSTR; var lpCC: COMMCONFIG;
var lpdwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetDefaultCommConfig}
{$ENDIF}

function SetDefaultCommConfigA(lpszName: LPCSTR; const lpCC: COMMCONFIG;
dwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetDefaultCommConfigA}
function SetDefaultCommConfigW(lpszName: LPCWSTR; const lpCC: COMMCONFIG;
dwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetDefaultCommConfigW}

{$IFDEF UNICODE}
function SetDefaultCommConfig(lpszName: LPCWSTR; const lpCC: COMMCONFIG;
dwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetDefaultCommConfig}
{$ELSE}
function SetDefaultCommConfig(lpszName: LPCSTR; const lpCC: COMMCONFIG;
dwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetDefaultCommConfig}
{$ENDIF}

const
MAX_COMPUTERNAME_LENGTH = 15;
{$EXTERNALSYM MAX_COMPUTERNAME_LENGTH}

function GetComputerNameA(lpBuffer: LPSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetComputerNameA}
function GetComputerNameW(lpBuffer: LPWSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetComputerNameW}

{$IFDEF UNICODE}
function GetComputerName(lpBuffer: LPWSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetComputerNameA}
{$ELSE}
function GetComputerName(lpBuffer: LPSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetComputerNameA}
{$ENDIF}

function SetComputerNameA(lpComputerName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetComputerNameA}
function SetComputerNameW(lpComputerName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetComputerNameW}

{$IFDEF UNICODE}
function SetComputerName(lpComputerName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetComputerNameA}
{$ELSE}
function SetComputerName(lpComputerName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetComputerNameA}
{$ENDIF}

type
_COMPUTER_NAME_FORMAT = (
ComputerNameNetBIOS,
ComputerNameDnsHostname,
ComputerNameDnsDomain,
ComputerNameDnsFullyQualified,
ComputerNamePhysicalNetBIOS,
ComputerNamePhysicalDnsHostname,
ComputerNamePhysicalDnsDomain,
ComputerNamePhysicalDnsFullyQualified,
ComputerNameMax);
{$EXTERNALSYM _COMPUTER_NAME_FORMAT}
COMPUTER_NAME_FORMAT = _COMPUTER_NAME_FORMAT;
{$EXTERNALSYM COMPUTER_NAME_FORMAT}
TComputerNameFormat = COMPUTER_NAME_FORMAT;

function GetComputerNameExA(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPSTR;
var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetComputerNameExA}
function GetComputerNameExW(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPWSTR;
var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetComputerNameExW}

{$IFDEF UNICODE}
function GetComputerNameEx(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPWSTR;
varnSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetComputerNameExA}


{$ELSE}
function GetComputerNameEx(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPSTR;
var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetComputerNameExA}
{$ENDIF}

function SetComputerNameExA(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetComputerNameExA}
function SetComputerNameExW(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetComputerNameExW}

{$IFDEF UNICODE}
function SetComputerNameEx(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetComputerNameExA}
{$ELSE}
function SetComputerNameEx(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetComputerNameExA}
{$ENDIF}

function AddLocalAlternateComputerNameA(lpDnsFQHostname: LPCSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM AddLocalAlternateComputerNameA}
function AddLocalAlternateComputerNameW(lpDnsFQHostname: LPCWSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM AddLocalAlternateComputerNameW}



{$IFDEF UNICODE}
function AddLocalAlternateComputerName(lpDnsFQHostname: LPCWSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM AddLocalAlternateComputerName}
{$ELSE}
function AddLocalAlternateComputerName(lpDnsFQHostname: LPCSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM AddLocalAlternateComputerName}
{$ENDIF}

function RemoveLocalAlternateComputerNameA(lpAltDnsFQHostname: LPCSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM RemoveLocalAlternateComputerNameA}
function RemoveLocalAlternateComputerNameW(lpAltDnsFQHostname: LPCWSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM RemoveLocalAlternateComputerNameW}

{$IFDEF UNICODE}
function RemoveLocalAlternateComputerName(lpAltDnsFQHostname: LPCWSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM RemoveLocalAlternateComputerName}
{$ELSE}
function RemoveLocalAlternateComputerName(lpAltDnsFQHostname: LPCSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM RemoveLocalAlternateComputerName}
{$ENDIF}

function SetLocalPrimaryComputerNameA(lpAltDnsFQHostname: LPCSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM SetLocalPrimaryComputerNameA}
function SetLocalPrimaryComputerNameW(lpAltDnsFQHostname: LPCSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM SetLocalPrimaryComputerNameW}

{$IFDEF UNICODE}
function SetLocalPrimaryComputerName(lpAltDnsFQHostname: LPCSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM SetLocalPrimaryComputerName}
{$ELSE}
function SetLocalPrimaryComputerName(lpAltDnsFQHostname: LPCSTR; ulFlags: ULONG): DWORD; stdcall;
{$EXTERNALSYM SetLocalPrimaryComputerName}
{$ENDIF}

type
_COMPUTER_NAME_TYPE = (
PrimaryComputerName,
AlternateComputerNames,
AllComputerNames,
ComputerNameTypeMax);
{$EXTERNALSYM _COMPUTER_NAME_TYPE}
COMPUTER_NAME_TYPE = _COMPUTER_NAME_TYPE;
{$EXTERNALSYM COMPUTER_NAME_TYPE}
TComputerNameType = COMPUTER_NAME_TYPE;

function EnumerateLocalComputerNamesA(NameType: COMPUTER_NAME_TYPE; ulFlags: ULONG;

lpDnsFQHostname: LPSTR; var nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM EnumerateLocalComputerNamesA}
function EnumerateLocalComputerNamesW(NameType: COMPUTER_NAME_TYPE; ulFlags: ULONG;
lpDnsFQHostname: LPWSTR; var nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM EnumerateLocalComputerNamesW}

{$IFDEF UNICODE}
function EnumerateLocalComputerNames(NameType: COMPUTER_NAME_TYPE; ulFlags: ULONG;
lpDnsFQHostname: LPWSTR; var nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM EnumerateLocalComputerNames}
{$ELSE}
function EnumerateLocalComputerNames(NameType: COMPUTER_NAME_TYPE; ulFlags: ULONG;
lpDnsFQHostname: LPSTR; var nSize: DWORD): DWORD; stdcall;
{$EXTERNALSYM EnumerateLocalComputerNames}
{$ENDIF}

function DnsHostnameToComputerNameA(Hostname, ComputerName: LPSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM DnsHostnameToComputerNameA}
function DnsHostnameToComputerNameW(Hostname, ComputerName: LPWSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM DnsHostnameToComputerNameW}



{$IFDEF UNICODE}
function DnsHostnameToComputerName(Hostname, ComputerName: LPWSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM DnsHostnameToComputerNameA}
{$ELSE}
function DnsHostnameToComputerName(Hostname, ComputerName: LPSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM DnsHostnameToComputerNameA}
{$ENDIF}

function GetUserNameA(lpBuffer: LPSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUserNameA}
function GetUserNameW(lpBuffer: LPWSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUserNameW}

{$IFDEF UNICODE}
function GetUserName(lpBuffer: LPWSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUserNameA}
{$ELSE}
function GetUserName(lpBuffer: LPSTR; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUserNameA}
{$ENDIF}

//
// Logon Support APIs
//

const
LOGON32_LOGON_INTERACTIVE = 2;
{$EXTERNALSYM LOGON32_LOGON_INTERACTIVE}
LOGON32_LOGON_NETWORK = 3;
{$EXTERNALSYM LOGON32_LOGON_NETWORK}

LOGON32_LOGON_BATCH = 4;
{$EXTERNALSYM LOGON32_LOGON_BATCH}
LOGON32_LOGON_SERVICE = 5;
{$EXTERNALSYM LOGON32_LOGON_SERVICE}
LOGON32_LOGON_UNLOCK = 7;
{$EXTERNALSYM LOGON32_LOGON_UNLOCK}
LOGON32_LOGON_NETWORK_CLEARTEXT = 8;
{$EXTERNALSYM LOGON32_LOGON_NETWORK_CLEARTEXT}
LOGON32_LOGON_NEW_CREDENTIALS = 9;
{$EXTERNALSYM LOGON32_LOGON_NEW_CREDENTIALS}

LOGON32_PROVIDER_DEFAULT = 0;
{$EXTERNALSYM LOGON32_PROVIDER_DEFAULT}
LOGON32_PROVIDER_WINNT35 = 1;
{$EXTERNALSYM LOGON32_PROVIDER_WINNT35}
LOGON32_PROVIDER_WINNT40 = 2;
{$EXTERNALSYM LOGON32_PROVIDER_WINNT40}
LOGON32_PROVIDER_WINNT50 = 3;
{$EXTERNALSYM LOGON32_PROVIDER_WINNT50}

function LogonUserA(lpszUsername, lpszDomain, lpszPassword: LPCSTR;
dwLogonType, dwLogonProvider: DWORD; var phToken: HANDLE): BOOL; stdcall;
{$EXTERNALSYM LogonUserA}
function LogonUserW(lpszUsername, lpszDomain, lpszPassword: LPCWSTR;
dwLogonType, dwLogonProvider: DWORD; var phToken: HANDLE): BOOL; stdcall;

{$EXTERNALSYM LogonUserW}

{$IFDEF UNICODE}
function LogonUser(lpszUsername, lpszDomain, lpszPassword: LPCWSTR;
dwLogonType, dwLogonProvider: DWORD; var phToken: HANDLE): BOOL; stdcall;
{$EXTERNALSYM LogonUserA}
{$ELSE}
function LogonUser(lpszUsername, lpszDomain, lpszPassword: LPCSTR;
dwLogonType, dwLogonProvider: DWORD; var phToken: HANDLE): BOOL; stdcall;
{$EXTERNALSYM LogonUserA}
{$ENDIF}

function LogonUserExA(lpszUsername, lpszDomain, lpszPassword: LPCSTR;
dwLogonType, dwLogonProvider: DWORD; var phToken: HANDLE; ppLogonSid: PPSID;
ppProfileBuffer: PPVOID; pdwProfileLength: LPDWORD; pQuotaLimits: PQUOTA_LIMITS): BOOL; stdcall;
{$EXTERNALSYM LogonUserExA}
function LogonUserExW(lpszUsername, lpszDomain, lpszPassword: LPCWSTR;
dwLogonType, dwLogonProvider: DWORD; var phToken: HANDLE; ppLogonSid: PPSID;
ppProfileBuffer: PPVOID; pdwProfileLength: LPDWORD; pQuotaLimits: PQUOTA_LIMITS): BOOL; stdcall;
{$EXTERNALSYM LogonUserExW}

{$IFDEF UNICODE}
function LogonUserEx(lpszUsername, lpszDomain, lpszPassword: LPCWSTR;
dwLogonType, dwLogonProvider: DWORD; var phToken: HANDLE; ppLogonSid: PPSID;
ppProfileBuffer: PPVOID; pdwProfileLength: LPDWORD; pQuotaLimits: PQUOTA_LIMITS): BOOL; stdcall;
{$EXTERNALSYM LogonUserEx}
{$ELSE}
function LogonUserEx(lpszUsername, lpszDomain, lpszPassword: LPCSTR;
dwLogonType, dwLogonProvider: DWORD; var phToken: HANDLE; ppLogonSid: PPSID;
ppProfileBuffer: PPVOID; pdwProfileLength: LPDWORD; pQuotaLimits: PQUOTA_LIMITS): BOOL; stdcall;
{$EXTERNALSYM LogonUserEx}
{$ENDIF}

function ImpersonateLoggedOnUser(hToken: HANDLE): BOOL; stdcall;
{$EXTERNALSYM ImpersonateLoggedOnUser}

function CreateProcessAsUserA(hToken: HANDLE; lpApplicationName: LPCSTR;
lpCommandLine: LPSTR; lpProcessAttributes: LPSECURITY_ATTRIBUTES;
lpThreadAttributes: LPSECURITY_ATTRIBUTES; bInheritHandles: BOOL;
dwCreationFlags: DWORD; lpEnvironment: LPVOID; lpCurrentDirectory: LPCSTR;
const lpStartupInfo: STARTUPINFOA; var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;

{$EXTERNALSYM CreateProcessAsUserA}
function CreateProcessAsUserW(hToken: HANDLE; lpApplicationName: LPCWSTR;
lpCommandLine: LPWSTR; lpProcessAttributes: LPSECURITY_ATTRIBUTES;
lpThreadAttributes: LPSECURITY_ATTRIBUTES; bInheritHandles: BOOL;
dwCreationFlags: DWORD; lpEnvironment: LPVOID; lpCurrentDirectory: LPCWSTR;
const lpStartupInfo: STARTUPINFOW; var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM CreateProcessAsUserW}

{$IFDEF UNICODE}
function CreateProcessAsUser(hToken: HANDLE; lpApplicationName: LPCWSTR;
lpCommandLine: LPWSTR; lpProcessAttributes: LPSECURITY_ATTRIBUTES;
lpThreadAttributes: LPSECURITY_ATTRIBUTES; bInheritHandles: BOOL;
dwCreationFlags: DWORD; lpEnvironment: LPVOID; lpCurrentDirectory: LPCWSTR;
const lpStartupInfo: STARTUPINFOW; var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM CreateProcessAsUserA}
{$ELSE}
function CreateProcessAsUser(hToken: HANDLE; lpApplicationName: LPCSTR;

lpCommandLine: LPSTR; lpProcessAttributes: LPSECURITY_ATTRIBUTES;
lpThreadAttributes: LPSECURITY_ATTRIBUTES; bInheritHandles: BOOL;
dwCreationFlags: DWORD; lpEnvironment: LPVOID; lpCurrentDirectory: LPCSTR;
const lpStartupInfo: STARTUPINFOA; var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM CreateProcessAsUserA}
{$ENDIF}

//
// LogonFlags
//

const
LOGON_WITH_PROFILE = $00000001;
{$EXTERNALSYM LOGON_WITH_PROFILE}
LOGON_NETCREDENTIALS_ONLY = $00000002;
{$EXTERNALSYM LOGON_NETCREDENTIALS_ONLY}
LOGON_ZERO_PASSWORD_BUFFER = DWORD($80000000);
{$EXTERNALSYM LOGON_ZERO_PASSWORD_BUFFER}

function CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword: LPCWSTR;
dwLogonFlags: DWORD; lpApplicationName: LPCWSTR; lpCommandLine: LPWSTR;
dwCreationFlags: DWORD; lpEnvironment: LPVOID; lpCurrentDirectory: LPCWSTR;
const lpStartupInfo: STARTUPINFOW; var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM CreateProcessWithLogonW}

function CreateProcessWithTokenW(hToken: HANDLE; dwLogonFlags: DWORD; lpApplicationName: LPCWSTR; lpCommandLine: LPWSTR;
dwCreationFlags: DWORD; lpEnvironment: LPVOID; lpCurrentDirectory: LPCWSTR; lpStartupInfo: LPSTARTUPINFOW;
lpProcessInformation: LPPROCESS_INFORMATION): BOOL; stdcall;
{$EXTERNALSYM CreateProcessWithTokenW}

function ImpersonateAnonymousToken(ThreadHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM ImpersonateAnonymousToken}

function DuplicateTokenEx(hExistingToken: HANDLE; dwDesiredAccess: DWORD;
lpTokenAttributes: LPSECURITY_ATTRIBUTES; ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL;
TokenType: TOKEN_TYPE; var phNewToken: HANDLE): BOOL; stdcall;
{$EXTERNALSYM DuplicateTokenEx}

function CreateRestrictedToken(ExistingTokenHandle: HANDLE; Flags: DWORD;
DisableSidCount: DWORD; SidsToDisable: PSID_AND_ATTRIBUTES;
DeletePrivilegeCount: DWORD; PrivilegesToDelete: PLUID_AND_ATTRIBUTES;
RestrictedSidCount: DWORD; SidsToRestrict: PSID_AND_ATTRIBUTES;
var NewTokenHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM CreateRestrictedToken}

function IsTokenRestricted(TokenHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM IsTokenRestricted}

function CheckTokenMembership(TokenHandle: HANDLE; SidToCheck: PSID; var IsMember: BOOL): BOOL; stdcall;
{$EXTERNALSYM CheckTokenMembership}

function IsTokenUntrusted(TokenHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM IsTokenUntrusted}

//
// Thread pool API''s
//

type
WAITORTIMERCALLBACK = WAITORTIMERCALLBACKFUNC;
{$EXTERNALSYM WAITORTIMERCALLBACK}
TWaitOrTimerCallback = WAITORTIMERCALLBACKFUNC;

function RegisterWaitForSingleObject(var phNewWaitObject: HANDLE; hObject: HANDLE;
Callback: WAITORTIMERCALLBACK; Context: PVOID; dwMilliseconds, dwFlags: ULONG): BOOL; stdcall;
{$EXTERNALSYM RegisterWaitForSingleObject}

function RegisterWaitForSingleObjectEx(hObject: HANDLE;
Callback: WAITORTIMERCALLBACK; Context: PVOID; dwMilliseconds, dwFlags: ULONG): HANDLE; stdcall;

{$EXTERNALSYM RegisterWaitForSingleObjectEx}

function UnregisterWait(WaitHandle: HANDLE): BOOL; stdcall;
{$EXTERNALSYM UnregisterWait}

function UnregisterWaitEx(WaitHandle, CompletionEvent: HANDLE): BOOL; stdcall;
{$EXTERNALSYM UnregisterWaitEx}

function QueueUserWorkItem(Function_: LPTHREAD_START_ROUTINE; Context: PVOID;
Flags: ULONG): BOOL; stdcall;
{$EXTERNALSYM QueueUserWorkItem}

function BindIoCompletionCallback(FileHandle: HANDLE;
Function_: LPOVERLAPPED_COMPLETION_ROUTINE; Flags: ULONG): BOOL; stdcall;
{$EXTERNALSYM BindIoCompletionCallback}

function CreateTimerQueue: HANDLE; stdcall;
{$EXTERNALSYM CreateTimerQueue}

function CreateTimerQueueTimer(var phNewTimer: HANDLE; TimerQueue: HANDLE;
Callback: WAITORTIMERCALLBACK; Parameter: PVOID; DueTime, Period: DWORD;
Flags: ULONG): BOOL; stdcall;
{$EXTERNALSYM CreateTimerQueueTimer}

function ChangeTimerQueueTimer(TimerQueue, Timer: HANDLE; DueTime, Period: ULONG): BOOL; stdcall;
{$EXTERNALSYM ChangeTimerQueueTimer}

function DeleteTimerQueueTimer(TimerQueue, Timer, CompletionEvent: HANDLE): BOOL; stdcall;
{$EXTERNALSYM DeleteTimerQueueTimer}

function DeleteTimerQueueEx(TimerQueue, CompletionEvent: HANDLE): BOOL; stdcall;
{$EXTERNALSYM DeleteTimerQueueEx}

function SetTimerQueueTimer(TimerQueue, Callback: WAITORTIMERCALLBACK;
Parameter: PVOID; DueTime, Period: DWORD; PreferIo: BOOL): HANDLE; stdcall;
{$EXTERNALSYM SetTimerQueueTimer}

function CancelTimerQueueTimer(TimerQueue, Timer: HANDLE): BOOL; stdcall;
{$EXTERNALSYM CancelTimerQueueTimer}

function DeleteTimerQueue(TimerQueue: HANDLE): BOOL; stdcall;
{$EXTERNALSYM DeleteTimerQueue}

//
// Plug-and-Play API''s
//

const
HW_PROFILE_GUIDLEN = 39; // 36-characters plus NULL terminator
{$EXTERNALSYM HW_PROFILE_GUIDLEN}
MAX_PROFILE_LEN = 80;
{$EXTERNALSYM MAX_PROFILE_LEN}

DOCKINFO_UNDOCKED = ($1);
{$EXTERNALSYM DOCKINFO_UNDOCKED}
DOCKINFO_DOCKED = ($2);
{$EXTERNALSYM DOCKINFO_DOCKED}
DOCKINFO_USER_SUPPLIED = ($4);
{$EXTERNALSYM DOCKINFO_USER_SUPPLIED}
DOCKINFO_USER_UNDOCKED = (DOCKINFO_USER_SUPPLIED or DOCKINFO_UNDOCKED);
{$EXTERNALSYM DOCKINFO_USER_UNDOCKED}
DOCKINFO_USER_DOCKED = (DOCKINFO_USER_SUPPLIED or DOCKINFO_DOCKED);
{$EXTERNALSYM DOCKINFO_USER_DOCKED}

type
LPHW_PROFILE_INFOA = ^HW_PROFILE_INFOA;
{$EXTERNALSYM LPHW_PROFILE_INFOA}
tagHW_PROFILE_INFOA = record
dwDockInfo: DWORD;
szHwProfileGuid: array [0..HW_PROFILE_GUIDLEN - 1] of CHAR;
szHwProfileName: array [0..MAX_PROFILE_LEN - 1] of CHAR;
end;
{$EXTERNALSYM tagHW_PROFILE_INFOA}
HW_PROFILE_INFOA = tagHW_PROFILE_INFOA;
{$EXTERNALSYM HW_PROFILE_INFOA}
THWProfileInfoA = HW_PROFILE_INFOA;
PHWProfileInfoA = LPHW_PROFILE_INFOA;

LPHW_PROFILE_INFOW = ^HW_PROFILE_INFOW;
{$EXTERNALSYM LPHW_PROFILE_INFOW}
tagHW_PROFILE_INFOW = record
dwDockInfo: DWORD;

szHwProfileGuid: array [0..HW_PROFILE_GUIDLEN - 1] of WCHAR;
szHwProfileName: array [0..MAX_PROFILE_LEN - 1] of WCHAR;
end;
{$EXTERNALSYM tagHW_PROFILE_INFOW}
HW_PROFILE_INFOW = tagHW_PROFILE_INFOW;
{$EXTERNALSYM HW_PROFILE_INFOW}
THWProfileInfoW = HW_PROFILE_INFOW;
PHWProfileInfoW = LPHW_PROFILE_INFOW;

{$IFDEF UNICODE}
HW_PROFILE_INFO = HW_PROFILE_INFOW;
{$EXTERNALSYM HW_PROFILE_INFO}
LPHW_PROFILE_INFO = LPHW_PROFILE_INFOW;
{$EXTERNALSYM LPHW_PROFILE_INFO}
THWProfileInfo = THWProfileInfoW;
PHWProfileInfo = PHWProfileInfoW;
{$ELSE}
HW_PROFILE_INFO = HW_PROFILE_INFOA;
{$EXTERNALSYM HW_PROFILE_INFO}
LPHW_PROFILE_INFO = LPHW_PROFILE_INFOA;
{$EXTERNALSYM LPHW_PROFILE_INFO}
THWProfileInfo = THWProfileInfoA;
PHWProfileInfo = PHWProfileInfoA;
{$ENDIF}

function GetCurrentHwProfileA(var lpHwProfileInfo: HW_PROFILE_INFOA): BOOL; stdcall;
{$EXTERNALSYM GetCurrentHwProfileA}
function GetCurrentHwProfileW(var lpHwProfileInfo: HW_PROFILE_INFOW): BOOL; stdcall;

{$EXTERNALSYM GetCurrentHwProfileW}

{$IFDEF UNICODE}
function GetCurrentHwProfile(var lpHwProfileInfo: HW_PROFILE_INFOW): BOOL; stdcall;
{$EXTERNALSYM GetCurrentHwProfileA}
{$ELSE}
function GetCurrentHwProfile(var lpHwProfileInfo: HW_PROFILE_INFOA): BOOL; stdcall;
{$EXTERNALSYM GetCurrentHwProfileA}
{$ENDIF}

//
// Performance counter API''s
//

function QueryPerformanceCounter(var lpPerformanceCount: LARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM QueryPerformanceCounter}

function QueryPerformanceFrequency(var lpFrequency: LARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM QueryPerformanceFrequency}

function GetVersionExA(lpVersionInformation: LPOSVERSIONINFOA): BOOL; stdcall;
{$EXTERNALSYM GetVersionExA}
function GetVersionExW(lpVersionInformation: LPOSVERSIONINFOW): BOOL; stdcall;
{$EXTERNALSYM GetVersionExW}

{$IFDEF UNICODE}
function GetVersionEx(lpVersionInformation: LPOSVERSIONINFOW): BOOL; stdcall;
{$EXTERNALSYM GetVersionEx}
{$ELSE}
function GetVersionEx(lpVersionInformation: LPOSVERSIONINFOA): BOOL; stdcall;
{$EXTERNALSYM GetVersionEx}
{$ENDIF}

function VerifyVersionInfoA(var lpVersionInformation: OSVERSIONINFOEXA;
dwTypeMask: DWORD; dwlConditionMask: DWORDLONG): BOOL; stdcall;
{$EXTERNALSYM VerifyVersionInfoA}
function VerifyVersionInfoW(var lpVersionInformation: OSVERSIONINFOEXW;
dwTypeMask: DWORD; dwlConditionMask: DWORDLONG): BOOL; stdcall;
{$EXTERNALSYM VerifyVersionInfoW}

{$IFDEF UNICODE}
function VerifyVersionInfo(var lpVersionInformation: OSVERSIONINFOEXW;
dwTypeMask: DWORD; dwlConditionMask: DWORDLONG): BOOL; stdcall;
{$EXTERNALSYM VerifyVersionInfo}
{$ELSE}
function VerifyVersionInfo(var lpVersionInformation: OSVERSIONINFOEXA;
dwTypeMask: DWORD; dwlConditionMask: DWORDLONG): BOOL; stdcall;
{$EXTERNALSYM VerifyVersionInfo}
{$ENDIF}

// DOS and OS/2 Compatible Error Code definitions returned by the Win32 Base
// API functions.
//

// #include

// Abnormal termination codes

const
TC_NORMAL = 0;
{$EXTERNALSYM TC_NORMAL}
TC_HARDERR = 1;
{$EXTERNALSYM TC_HARDERR}
TC_GP_TRAP = 2;
{$EXTERNALSYM TC_GP_TRAP}
TC_SIGNAL = 3;
{$EXTERNALSYM TC_SIGNAL}

//
// Power Management APIs
//

AC_LINE_OFFLINE = $00;
{$EXTERNALSYM AC_LINE_OFFLINE}
AC_LINE_ONLINE = $01;
{$EXTERNALSYM AC_LINE_ONLINE}
AC_LINE_BACKUP_POWER = $02;
{$EXTERNALSYM AC_LINE_BACKUP_POWER}
AC_LINE_UNKNOWN = $FF;
{$EXTERNALSYM AC_LINE_UNKNOWN}

BATTERY_FLAG_HIGH = $01;
{$EXTERNALSYM BATTERY_FLAG_HIGH}
BATTERY_FLAG_LOW = $02;
{$EXTERNALSYM BATTERY_FLAG_LOW}
BATTERY_FLAG_CRITICAL = $04;
{$EXTERNALSYM BATTERY_FLAG_CRITICAL}
BATTERY_FLAG_CHARGING = $08;
{$EXTERNALSYM BATTERY_FLAG_CHARGING}
BATTERY_FLAG_NO_BATTERY = $80;
{$EXTERNALSYM BATTERY_FLAG_NO_BATTERY}
BATTERY_FLAG_UNKNOWN = $FF;
{$EXTERNALSYM BATTERY_FLAG_UNKNOWN}



BATTERY_PERCENTAGE_UNKNOWN = $FF;
{$EXTERNALSYM BATTERY_PERCENTAGE_UNKNOWN}

BATTERY_LIFE_UNKNOWN = DWORD($FFFFFFFF);
{$EXTERNALSYM BATTERY_LIFE_UNKNOWN}

type
LPSYSTEM_POWER_STATUS = ^SYSTEM_POWER_STATUS;
{$EXTERNALSYM LPSYSTEM_POWER_STATUS}
_SYSTEM_POWER_STATUS = record
ACLineStatus: BYTE;
BatteryFlag: BYTE;
BatteryLifePercent: BYTE;
Reserved1: BYTE;
BatteryLifeTime: DWORD;
BatteryFullLifeTime: DWORD;
end;
{$EXTERNALSYM _SYSTEM_POWER_STATUS}
SYSTEM_POWER_STATUS = _SYSTEM_POWER_STATUS;
{$EXTERNALSYM SYSTEM_POWER_STATUS}
TSystemPowerStatus = SYSTEM_POWER_STATUS;
PSystemPowerStatus = LPSYSTEM_POWER_STATUS;

function GetSystemPowerStatus(var lpSystemPowerStatus: SYSTEM_POWER_STATUS): BOOL; stdcall;
{$EXTERNALSYM GetSystemPowerStatus}

function SetSystemPowerState(fSuspend, fForce: BOOL): BOOL; stdcall;
{$EXTERNALSYM SetSystemPowerState}

//
// Very Large Memory API Subset
//

function AllocateUserPhysicalPages(hProcess: HANDLE; var NumberOfPages: ULONG_PTR;
PageArray: PULONG_PTR): BOOL; stdcall;
{$EXTERNALSYM AllocateUserPhysicalPages}

function FreeUserPhysicalPages(hProcess: HANDLE; var NumberOfPages: ULONG_PTR;
PageArray: PULONG_PTR): BOOL; stdcall;
{$EXTERNALSYM FreeUserPhysicalPages}

function MapUserPhysicalPages(VirtualAddress: PVOID; NumberOfPages: ULONG_PTR;
PageArray: PULONG_PTR): BOOL; stdcall;
{$EXTERNALSYM MapUserPhysicalPages}

function MapUserPhysicalPagesScatter(VirtualAddresses: PVOID; NumberOfPages: ULONG_PTR;
PageArray: PULONG_PTR): BOOL; stdcall;
{$EXTERNALSYM MapUserPhysicalPagesScatter}

function CreateJobObjectA(lpJobAttributes: LPSECURITY_ATTRIBUTES; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateJobObjectA}
function CreateJobObjectW(lpJobAttributes: LPSECURITY_ATTRIBUTES; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateJobObjectW}

{$IFDEF UNICODE}
function CreateJobObject(lpJobAttributes: LPSECURITY_ATTRIBUTES; lpName: LPCWSTR): HANDLE; stdcall;

{$EXTERNALSYM CreateJobObject}
{$ELSE}
function CreateJobObject(lpJobAttributes: LPSECURITY_ATTRIBUTES; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM CreateJobObject}
{$ENDIF}

function OpenJobObjectA(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenJobObjectA}
function OpenJobObjectW(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenJobObjectW}

{$IFDEF UNICODE}
function OpenJobObject(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCWSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenJobObject}
{$ELSE}
function OpenJobObject(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: LPCSTR): HANDLE; stdcall;
{$EXTERNALSYM OpenJobObject}
{$ENDIF}

function AssignProcessToJobObject(hJob, hProcess: HANDLE): BOOL; stdcall;
{$EXTERNALSYM AssignProcessToJobObject}

function TerminateJobObject(hJob: HANDLE; uExitCode: UINT): BOOL; stdcall;
{$EXTERNALSYM TerminateJobObject}

function QueryInformationJobObject(hJob: HANDLE; JobObjectInformationClass: JOBOBJECTINFOCLASS;
lpJobObjectInformation: LPVOID; cbJobObjectInformationLength: DWORD;
lpReturnLength: LPDWORD): BOOL; stdcall;
{$EXTERNALSYM QueryInformationJobObject}

function SetInformationJobObject(hJob: HANDLE; JobObjectInformationClass: JOBOBJECTINFOCLASS;
lpJobObjectInformation: LPVOID; cbJobObjectInformationLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetInformationJobObject}

function IsProcessInJob(ProcessHandle, JobHandle: HANDLE; var Result_: BOOL): BOOL; stdcall;
{$EXTERNALSYM IsProcessInJob}

function CreateJobSet(NumJob: ULONG; UserJobSet: PJOB_SET_ARRAY; Flags: ULONG): BOOL; stdcall;
{$EXTERNALSYM CreateJobSet}

function AddVectoredExceptionHandler(FirstHandler: ULONG;
VectoredHandler: PVECTORED_EXCEPTION_HANDLER): PVOID; stdcall;
{$EXTERNALSYM AddVectoredExceptionHandler}

function RemoveVectoredExceptionHandler(VectoredHandlerHandle: PVOID): ULONG; stdcall;

{$EXTERNALSYM RemoveVectoredExceptionHandler}

//
// New Volume Mount Point API.
//

function FindFirstVolumeA(lpszVolumeName: LPSTR; cchBufferLength: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstVolumeA}
function FindFirstVolumeW(lpszVolumeName: LPWSTR; cchBufferLength: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstVolumeW}

{$IFDEF UNICODE}
function FindFirstVolume(lpszVolumeName: LPWSTR; cchBufferLength: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstVolume}
{$ELSE}
function FindFirstVolume(lpszVolumeName: LPSTR; cchBufferLength: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstVolume}
{$ENDIF}

function FindNextVolumeA(hFindVolume: HANDLE; lpszVolumeName: LPSTR;
cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextVolumeA}
function FindNextVolumeW(hFindVolume: HANDLE; lpszVolumeName: LPWSTR;
cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextVolumeW}

{$IFDEF UNICODE}
function FindNextVolume(hFindVolume: HANDLE; lpszVolumeName: LPWSTR;
cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextVolume}
{$ELSE}
function FindNextVolume(hFindVolume: HANDLE; lpszVolumeName: LPSTR;
cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextVolume}
{$ENDIF}

function FindVolumeClose(hFindVolume: HANDLE): BOOL; stdcall;
{$EXTERNALSYM FindVolumeClose}

function FindFirstVolumeMountPointA(lpszRootPathName: LPCSTR;
lpszVolumeMountPoint: LPSTR; cchBufferLength: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstVolumeMountPointA}
function FindFirstVolumeMountPointW(lpszRootPathName: LPCWSTR;
lpszVolumeMountPoint: LPWSTR; cchBufferLength: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstVolumeMountPointW}

{$IFDEF UNICODE}
function FindFirstVolumeMountPoint(lpszRootPathName: LPCWSTR;
lpszVolumeMountPoint: LPWSTR; cchBufferLength: DWORD): HANDLE; stdcall;
{$EXTERNALSYM FindFirstVolumeMountPoint}
{$ELSE}
function FindFirstVolumeMountPoint(lpszRootPathName: LPCSTR;
lpszVolumeMountPoint: LPSTR; cchBufferLength: DWORD): HANDLE; stdcall;


{$EXTERNALSYM FindFirstVolumeMountPoint}
{$ENDIF}

function FindNextVolumeMountPointA(hFindVolumeMountPoint: HANDLE;
lpszVolumeMountPoint: LPSTR; cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextVolumeMountPointA}
function FindNextVolumeMountPointW(hFindVolumeMountPoint: HANDLE;
lpszVolumeMountPoint: LPWSTR; cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextVolumeMountPointW}

{$IFDEF UNICODE}
function FindNextVolumeMountPoint(hFindVolumeMountPoint: HANDLE;
lpszVolumeMountPoint: LPWSTR; cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextVolumeMountPoint}
{$ELSE}
function FindNextVolumeMountPoint(hFindVolumeMountPoint: HANDLE;
lpszVolumeMountPoint: LPSTR; cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextVolumeMountPoint}
{$ENDIF}

function FindVolumeMountPointClose(hFindVolumeMountPoint: HANDLE): BOOL; stdcall;
{$EXTERNALSYM FindVolumeMountPointClose}

function SetVolumeMountPointA(lpszVolumeMountPoint, lpszVolumeName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetVolumeMountPointA}
function SetVolumeMountPointW(lpszVolumeMountPoint, lpszVolumeName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetVolumeMountPointW}

{$IFDEF UNICODE}
function SetVolumeMountPoint(lpszVolumeMountPoint, lpszVolumeName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM SetVolumeMountPoint}
{$ELSE}
function SetVolumeMountPoint(lpszVolumeMountPoint, lpszVolumeName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM SetVolumeMountPoint}
{$ENDIF}

function DeleteVolumeMountPointA(lpszVolumeMountPoint: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM DeleteVolumeMountPointA}
function DeleteVolumeMountPointW(lpszVolumeMountPoint: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM DeleteVolumeMountPointW}

{$IFDEF UNICODE}
function DeleteVolumeMountPoint(lpszVolumeMountPoint: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM DeleteVolumeMountPoint}
{$ELSE}
function DeleteVolumeMountPoint(lpszVolumeMountPoint: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM DeleteVolumeMountPoint}
{$ENDIF}

function GetVolumeNameForVolumeMountPointA(lpszVolumeMountPoint: LPCSTR;
lpszVolumeName: LPSTR; cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumeNameForVolumeMountPointA}
function GetVolumeNameForVolumeMountPointW(lpszVolumeMountPoint: LPCWSTR;
lpszVolumeName: LPWSTR; cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumeNameForVolumeMountPointW}

{$IFDEF UNICODE}
function GetVolumeNameForVolumeMountPoint(lpszVolumeMountPoint: LPCWSTR;
lpszVolumeName: LPWSTR; cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumeNameForVolumeMountPoint}
{$ELSE}
function GetVolumeNameForVolumeMountPoint(lpszVolumeMountPoint: LPCSTR;
lpszVolumeName: LPSTR; cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumeNameForVolumeMountPoint}
{$ENDIF}

function GetVolumePathNameA(lpszFileName: LPCSTR; lpszVolumePathName: LPSTR;
cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumePathNameA}
function GetVolumePathNameW(lpszFileName: LPCWSTR; lpszVolumePathName: LPWSTR;
cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumePathNameW}

{$IFDEF UNICODE}
function GetVolumePathName(lpszFileName: LPCWSTR; lpszVolumePathName: LPWSTR;
cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumePathName}
{$ELSE}
function GetVolumePathName(lpszFileName: LPCSTR; lpszVolumePathName: LPSTR;
cchBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumePathName}
{$ENDIF}

function GetVolumePathNamesForVolumeNameA(lpszVolumeName, lpszVolumePathNames: LPCSTR;
cchBufferLength: DWORD; var lpcchReturnLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumePathNamesForVolumeNameA}
function GetVolumePathNamesForVolumeNameW(lpszVolumeName, lpszVolumePathNames: LPCWSTR;
cchBufferLength: DWORD; var lpcchReturnLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumePathNamesForVolumeNameW}

{$IFDEF UNICODE}
function GetVolumePathNamesForVolumeName(lpszVolumeName, lpszVolumePathNames: LPCWSTR;
cchBufferLength: DWORD; var lpcchReturnLength: DWORD): BOOL; stdcall;

{$EXTERNALSYM GetVolumePathNamesForVolumeName}
{$ELSE}
function GetVolumePathNamesForVolumeName(lpszVolumeName, lpszVolumePathNames: LPCSTR;
cchBufferLength: DWORD; var lpcchReturnLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumePathNamesForVolumeName}
{$ENDIF}

const
ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID = ($00000001);
{$EXTERNALSYM ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID}
ACTCTX_FLAG_LANGID_VALID = ($00000002);
{$EXTERNALSYM ACTCTX_FLAG_LANGID_VALID}
ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID = ($00000004);
{$EXTERNALSYM ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID}
ACTCTX_FLAG_RESOURCE_NAME_VALID = ($00000008);
{$EXTERNALSYM ACTCTX_FLAG_RESOURCE_NAME_VALID}
ACTCTX_FLAG_SET_PROCESS_DEFAULT = ($00000010);
{$EXTERNALSYM ACTCTX_FLAG_SET_PROCESS_DEFAULT}
ACTCTX_FLAG_APPLICATION_NAME_VALID = ($00000020);
{$EXTERNALSYM ACTCTX_FLAG_APPLICATION_NAME_VALID}
ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF = ($00000040);
{$EXTERNALSYM ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF}
ACTCTX_FLAG_HMODULE_VALID = ($00000080);
{$EXTERNALSYM ACTCTX_FLAG_HMODULE_VALID}

type
tagACTCTXA = record
cbSize: ULONG;
dwFlags: DWORD;
lpSource: LPCSTR;
wProcessorArchitecture: USHORT;
wLangId: LANGID;
lpAssemblyDirectory: LPCSTR;
lpResourceName: LPCSTR;
lpApplicationName: LPCSTR;
hModule: HMODULE;
end;
{$EXTERNALSYM tagACTCTXA}
ACTCTXA = tagACTCTXA;
{$EXTERNALSYM ACTCTXA}
PACTCTXA = ^ACTCTXA;
{$EXTERNALSYM PACTCTXA}
TActCtxA = ACTCTXA;

tagACTCTXW = record
cbSize: ULONG;
dwFlags: DWORD;
lpSource: LPCWSTR;
wProcessorArchitecture: USHORT;
wLangId: LANGID;
lpAssemblyDirectory: LPCWSTR;
lpResourceName: LPCWSTR;
lpApplicationName: LPCWSTR;
hModule: HMODULE;
end;
{$EXTERNALSYM tagACTCTXW}
ACTCTXW = tagACTCTXW;
{$EXTERNALSYM ACTCTXW}
PACTCTXW = ^ACTCTXW;
{$EXTERNALSYM PACTCTXW}
TActCtxW = ACTCTXW;

{$IFDEF UNICODE}
ACTCTX = ACTCTXW;
{$EXTERNALSYM ACTCTX}
PACTCTX = PACTCTXW;
{$EXTERNALSYM PACTCTX}
TActCtx = TActCtxW;
{$ELSE}
ACTCTX = ACTCTXA;
{$EXTERNALSYM ACTCTX}
PACTCTX = PACTCTXA;
{$EXTERNALSYM PACTCTX}
TActCtx = TActCtxA;
{$ENDIF}

function CreateActCtxA(var pActCtx: ACTCTXA): HANDLE; stdcall;
{$EXTERNALSYM CreateActCtxA}
function CreateActCtxW(var pActCtx: ACTCTXW): HANDLE; stdcall;
{$EXTERNALSYM CreateActCtxW}

{$IFDEF UNICODE}
function CreateActCtx(var pActCtx: ACTCTXW): HANDLE; stdcall;
{$EXTERNALSYM CreateActCtx}
{$ELSE}
function CreateActCtx(var pActCtx: ACTCTXA): HANDLE; stdcall;
{$EXTERNALSYM CreateActCtx}
{$ENDIF}

procedure AddRefActCtx(hActCtx: HANDLE); stdcall;
{$EXTERNALSYM AddRefActCtx}

procedure ReleaseActCtx(hActCtx: HANDLE); stdcall;
{$EXTERNALSYM ReleaseActCtx}

function ZombifyActCtx(hActCtx: HANDLE): BOOL; stdcall;
{$EXTERNALSYM ZombifyActCtx}

function ActivateActCtx(hActCtx: HANDLE; var lpCookie: ULONG_PTR): BOOL; stdcall;
{$EXTERNALSYM ActivateActCtx}

const
DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION = ($00000001);
{$EXTERNALSYM DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION}

function DeactivateActCtx(dwFlags: DWORD; ulCookie: ULONG_PTR): BOOL; stdcall;
{$EXTERNALSYM DeactivateActCtx}

function GetCurrentActCtx(var lphActCtx: HANDLE): BOOL; stdcall;
{$EXTERNALSYM GetCurrentActCtx}

type
tagACTCTX_SECTION_KEYED_DATA_2600 = record
cbSize: ULONG;
ulDataFormatVersion: ULONG;
lpData: PVOID;
ulLength: ULONG;
lpSectionGlobalData: PVOID;
ulSectionGlobalDataLength: ULONG;
lpSectionBase: PVOID;
ulSectionTotalLength: ULONG;
hActCtx: HANDLE;
ulAssemblyRosterIndex: ULONG;
end;
{$EXTERNALSYM tagACTCTX_SECTION_KEYED_DATA_2600}
ACTCTX_SECTION_KEYED_DATA_2600 = tagACTCTX_SECTION_KEYED_DATA_2600;


{$EXTERNALSYM ACTCTX_SECTION_KEYED_DATA_2600}
PACTCTX_SECTION_KEYED_DATA_2600 = ^ACTCTX_SECTION_KEYED_DATA_2600;
{$EXTERNALSYM PACTCTX_SECTION_KEYED_DATA_2600}
PCACTCTX_SECTION_KEYED_DATA_2600 = ^ACTCTX_SECTION_KEYED_DATA_2600;
{$EXTERNALSYM PCACTCTX_SECTION_KEYED_DATA_2600}
TActCtxSectionKeyedData2600 = ACTCTX_SECTION_KEYED_DATA_2600;
PActCtxSectionKeyedData2600 = PACTCTX_SECTION_KEYED_DATA_2600;

tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA = record
lpInformation: PVOID;
lpSectionBase: PVOID;
ulSectionLength: ULONG;
lpSectionGlobalDataBase: PVOID;
ulSectionGlobalDataLength: ULONG;
end;
{$EXTERNALSYM tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA}
ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA = tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
{$EXTERNALSYM ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA}
PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA = ^ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
{$EXTERNALSYM PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA}
PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA = ^ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
{$EXTERNALSYM PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA}
TActCtxSectionKeyedDataAssemblyMetadata = ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
PActCtxSectionKeyedDataAssemblyMetadata = PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;

tagACTCTX_SECTION_KEYED_DATA = record
cbSize: ULONG;
ulDataFormatVersion: ULONG;
lpData: PVOID;
ulLength: ULONG;
lpSectionGlobalData: PVOID;
ulSectionGlobalDataLength: ULONG;
lpSectionBase: PVOID;
ulSectionTotalLength: ULONG;
hActCtx: HANDLE;
ulAssemblyRosterIndex: ULONG;
// 2600 stops here
ulFlags: ULONG;
AssemblyMetadata: ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
end;
{$EXTERNALSYM tagACTCTX_SECTION_KEYED_DATA}
ACTCTX_SECTION_KEYED_DATA = tagACTCTX_SECTION_KEYED_DATA;
{$EXTERNALSYM ACTCTX_SECTION_KEYED_DATA}
PACTCTX_SECTION_KEYED_DATA = ^ACTCTX_SECTION_KEYED_DATA;
{$EXTERNALSYM PACTCTX_SECTION_KEYED_DATA}
PCACTCTX_SECTION_KEYED_DATA = ^ACTCTX_SECTION_KEYED_DATA;
{$EXTERNALSYM PCACTCTX_SECTION_KEYED_DATA}
TActCtxSectionKeyedData = ACTCTX_SECTION_KEYED_DATA;
PActCtxSectionKeyedData = PACTCTX_SECTION_KEYED_DATA;

const
FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX = ($00000001);
{$EXTERNALSYM FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX}
FIND_ACTCTX_SECTION_KEY_RETURN_FLAGS = ($00000002);
{$EXTERNALSYM FIND_ACTCTX_SECTION_KEY_RETURN_FLAGS}
FIND_ACTCTX_SECTION_KEY_RETURN_ASSEMBLY_METADATA = ($00000004);
{$EXTERNALSYM FIND_ACTCTX_SECTION_KEY_RETURN_ASSEMBLY_METADATA}

function FindActCtxSectionStringA(dwFlags: DWORD; const lpExtensionGuid: TGUID;
ulSectionId: ULONG; lpStringToFind: LPCSTR; ReturnedData: PACTCTX_SECTION_KEYED_DATA): BOOL; stdcall;
{$EXTERNALSYM FindActCtxSectionStringA}
function FindActCtxSectionStringW(dwFlags: DWORD; const lpExtensionGuid: TGUID;
ulSectionId: ULONG; lpStringToFind: LPCWSTR; ReturnedData: PACTCTX_SECTION_KEYED_DATA): BOOL; stdcall;


{$EXTERNALSYM FindActCtxSectionStringW}

{$IFDEF UNICODE}
function FindActCtxSectionString(dwFlags: DWORD; const lpExtensionGuid: TGUID;
ulSectionId: ULONG; lpStringToFind: LPCWSTR; ReturnedData: PACTCTX_SECTION_KEYED_DATA): BOOL; stdcall;
{$EXTERNALSYM FindActCtxSectionString}
{$ELSE}
function FindActCtxSectionString(dwFlags: DWORD; const lpExtensionGuid: TGUID;
ulSectionId: ULONG; lpStringToFind: LPCSTR; ReturnedData: PACTCTX_SECTION_KEYED_DATA): BOOL; stdcall;
{$EXTERNALSYM FindActCtxSectionString}
{$ENDIF}

function FindActCtxSectionGuid(dwFlags: DWORD; const lpExtensionGuid: TGUID;
ulSectionId: ULONG; const lpGuidToFind: TGUID; ReturnedData: PACTCTX_SECTION_KEYED_DATA): BOOL; stdcall;
{$EXTERNALSYM FindActCtxSectionGuid}

type
_ACTIVATION_CONTEXT_BASIC_INFORMATION = record
hActCtx: HANDLE;
dwFlags: DWORD;
end;
{$EXTERNALSYM _ACTIVATION_CONTEXT_BASIC_INFORMATION}
ACTIVATION_CONTEXT_BASIC_INFORMATION = _ACTIVATION_CONTEXT_BASIC_INFORMATION;


{$EXTERNALSYM ACTIVATION_CONTEXT_BASIC_INFORMATION}
PACTIVATION_CONTEXT_BASIC_INFORMATION = ^ACTIVATION_CONTEXT_BASIC_INFORMATION;
{$EXTERNALSYM PACTIVATION_CONTEXT_BASIC_INFORMATION}
TActivationContextBasicInformation = ACTIVATION_CONTEXT_BASIC_INFORMATION;
PActivationContextBasicInformation = PACTIVATION_CONTEXT_BASIC_INFORMATION;

PCACTIVATION_CONTEXT_BASIC_INFORMATION = ^_ACTIVATION_CONTEXT_BASIC_INFORMATION;
{$EXTERNALSYM PCACTIVATION_CONTEXT_BASIC_INFORMATION}

const
ACTIVATION_CONTEXT_BASIC_INFORMATION_DEFINED = 1;
{$EXTERNALSYM ACTIVATION_CONTEXT_BASIC_INFORMATION_DEFINED}

QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX = ($00000004);
{$EXTERNALSYM QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX}
QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE = ($00000008);
{$EXTERNALSYM QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE}
QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS = ($00000010);
{$EXTERNALSYM QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS}
QUERY_ACTCTX_FLAG_NO_ADDREF = ($80000000);

{$EXTERNALSYM QUERY_ACTCTX_FLAG_NO_ADDREF}

//
// switch (ulInfoClass)
//
// case ActivationContextBasicInformation:
// pvSubInstance == NULL
// pvBuffer is of type PACTIVATION_CONTEXT_BASIC_INFORMATION
//
// case ActivationContextDetailedInformation:
// pvSubInstance == NULL
// pvBuffer is of type PACTIVATION_CONTEXT_DETAILED_INFORMATION
//
// case AssemblyDetailedInformationInActivationContext:
// pvSubInstance is of type PULONG
// *pvSubInstance < ACTIVATION_CONTEXT_DETAILED_INFORMATION::ulAssemblyCount
// pvBuffer is of type PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
//
// case FileInformationInAssemblyOfAssemblyInActivationContext:
// pvSubInstance is of type PACTIVATION_CONTEXT_QUERY_INDEX
// pvSubInstance->ulAssemblyIndex < ACTIVATION_CONTEXT_DETAILED_INFORMATION::ulAssemblyCount
// pvSubInstance->ulFileIndexInAssembly < ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION::ulFileCount
// pvBuffer is of type PASSEMBLY_FILE_DETAILED_INFORMATION


//
// String are placed after the structs.
//

function QueryActCtxW(dwFlags: DWORD; hActCtx: HANDLE; pvSubInstance: PVOID;
ulInfoClass: ULONG; pvBuffer: PVOID; cbBuffer: SIZE_T;
pcbWrittenOrRequired: PSIZE_T): BOOL; stdcall;
{$EXTERNALSYM QueryActCtxW}

type
PQUERYACTCTXW_FUNC = function (dwFlags: DWORD; hActCtx: HANDLE;
pvSubInstance: PVOID; ulInfoClass: ULONG; pvBuffer: PVOID; cbBuffer: SIZE_T;
pcbWrittenOrRequired: PSIZE_T): BOOL; stdcall;
{$EXTERNALSYM PQUERYACTCTXW_FUNC}

function ProcessIdToSessionId(dwProcessId: DWORD; var pSessionId: DWORD): BOOL; stdcall;
{$EXTERNALSYM ProcessIdToSessionId}

function WTSGetActiveConsoleSessionId: DWORD; stdcall;
{$EXTERNALSYM WTSGetActiveConsoleSessionId}

function IsWow64Process(hProcess: HANDLE; var Wow64Process: BOOL): BOOL; stdcall;
{$EXTERNALSYM IsWow64Process}

function GetLogicalProcessorInformation(Buffer: PSYSTEM_LOGICAL_PROCESSOR_INFORMATION; ReturnedLength: PDWORD): BOOL; stdcall;


{$EXTERNALSYM GetLogicalProcessorInformation}

//
// NUMA Information routines.
//

function GetNumaHighestNodeNumber(var HighestNodeNumber: ULONG): BOOL; stdcall;
{$EXTERNALSYM GetNumaHighestNodeNumber}

function GetNumaProcessorNode(Processor: UCHAR; var NodeNumber: UCHAR): BOOL; stdcall;
{$EXTERNALSYM GetNumaProcessorNode}

function GetNumaNodeProcessorMask(Node: UCHAR; ProcessorMask: ULONGLONG): BOOL; stdcall;
{$EXTERNALSYM GetNumaNodeProcessorMask}

function GetNumaAvailableMemoryNode(Node: UCHAR; var AvailableBytes: ULONGLONG): BOOL; stdcall;
{$EXTERNALSYM GetNumaAvailableMemoryNode}

implementation

const
kernel32 = ''kernel32.dll'';
advapi32 = ''advapi32.dll'';

procedure MoveMemory(Destination, Source: PVOID; Length: SIZE_T);
begin
Move(Source^, Destination^, Length);
end;

procedure CopyMemory(Destination, Source: PVOID; Length: SIZE_T);
begin
Move(Source^, Destination^, Length);
end;

procedure FillMemory(Destination: PVOID; Length: SIZE_T; Fill: BYTE);
begin
FillChar(Destination^, Length, Fill);
end;

procedure ZeroMemory(Destination: PVOID; Length: SIZE_T);
begin
FillChar(Destination^, Length, 0);
end;

function FreeModule(hLibModule: HMODULE): BOOL;
begin
Result := FreeLibrary(hLibModule);
end;

function MakeProcInstance(lpProc: FARPROC; hInstance: HINSTANCE): FARPROC;
begin
Result := lpProc;
end;

procedure FreeProcInstance(lpProc: FARPROC);
begin
{ nothing }
end;

function GlobalLRUNewest(h: HANDLE): HANDLE;
begin
Result := H;
end;

function GlobalLRUOldest(h: HANDLE): HANDLE;
begin
Result := H;
end;

function GlobalDiscard(h: HANDLE): HANDLE;
begin
Result := GlobalReAlloc(h, 0, GMEM_MOVEABLE);
end;

function LocalDiscard(h: HLOCAL): HLOCAL;
begin
Result := LocalReAlloc(h, 0, LMEM_MOVEABLE);
end;

function GetFreeSpace(w: WORD): DWORD;


begin
Result := $100000;
end;

function InterlockedExchangePointer(var Target: PVOID; Value: PVOID): PVOID;
begin
Result := PVOID(InterlockedExchange(LONG(Target), LONG(Value)));
end;

function InterlockedCompareExchangePointer(var Destination: PVOID; Exchange, Comperand: PVOID): PVOID;
begin
Result := PVOID(InterlockedCompareExchange(LONG(Destination), LONG(Exchange), LONG(Comperand)));
end;

function UnlockResource(hResData: HANDLE): BOOL;
begin
Result := False;
end;

function HasOverlappedIoCompleted(const lpOverlapped: OVERLAPPED): BOOL;
begin
Result := lpOverlapped.Internal <> STATUS_PENDING;
end;


{$IFDEF DYNAMIC_LINK}
var
_InterlockedIncrement: Pointer;

function InterlockedIncrement;
begin
GetProcedureAddress(_InterlockedIncrement, kernel32, ''InterlockedIncrement'');
asm
mov esp, ebp
pop ebp
jmp [_InterlockedIncrement]
end;
end;
{$ELSE}
function InterlockedIncrement; external kernel32 name ''InterlockedIncrement'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InterlockedDecrement: Pointer;

function InterlockedDecrement;
begin
GetProcedureAddress(_InterlockedDecrement, kernel32, ''InterlockedDecrement'');
asm
mov esp, ebp
pop ebp
jmp [_InterlockedDecrement]
end;
end;
{$ELSE}
function InterlockedDecrement; external kernel32 name ''InterlockedDecrement'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InterlockedExchange: Pointer;

function InterlockedExchange;
begin
GetProcedureAddress(_InterlockedExchange, kernel32, ''InterlockedExchange'');
asm
mov esp, ebp
pop ebp
jmp [_InterlockedExchange]
end;
end;
{$ELSE}
function InterlockedExchange; external kernel32 name ''InterlockedExchange'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InterlockedExchangeAdd: Pointer;

function InterlockedExchangeAdd;
begin
GetProcedureAddress(_InterlockedExchangeAdd, kernel32, ''InterlockedExchangeAdd'');

asm
mov esp, ebp
pop ebp
jmp [_InterlockedExchangeAdd]
end;
end;
{$ELSE}
function InterlockedExchangeAdd; external kernel32 name ''InterlockedExchangeAdd'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InterlockedCompareExchange: Pointer;

function InterlockedCompareExchange;
begin
GetProcedureAddress(_InterlockedCompareExchange, kernel32, ''InterlockedCompareExchange'');
asm
mov esp, ebp
pop ebp
jmp [_InterlockedCompareExchange]
end;
end;
{$ELSE}
function InterlockedCompareExchange; external kernel32 name ''InterlockedCompareExchange'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InitializeSListHead: Pointer;

procedure InitializeSListHead;
begin
GetProcedureAddress(_InitializeSListHead, kernel32, ''InitializeSListHead'');
asm
mov esp, ebp
pop ebp
jmp [_InitializeSListHead]
end;
end;
{$ELSE}
procedure InitializeSListHead; external kernel32 name ''InitializeSListHead'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InterlockedPopEntrySList: Pointer;

function InterlockedPopEntrySList;
begin
GetProcedureAddress(_InterlockedPopEntrySList, kernel32, ''InterlockedPopEntrySList'');
asm
mov esp, ebp
pop ebp
jmp [_InterlockedPopEntrySList]
end;
end;
{$ELSE}
function InterlockedPopEntrySList; external kernel32 name ''InterlockedPopEntrySList'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InterlockedPushEntrySList: Pointer;

function InterlockedPushEntrySList;
begin
GetProcedureAddress(_InterlockedPushEntrySList, kernel32, ''InterlockedPushEntrySList'');
asm
mov esp, ebp
pop ebp
jmp [_InterlockedPushEntrySList]
end;
end;
{$ELSE}
function InterlockedPushEntrySList; external kernel32 name ''InterlockedPushEntrySList'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InterlockedFlushSList: Pointer;

function InterlockedFlushSList;
begin
GetProcedureAddress(_InterlockedFlushSList, kernel32, ''InterlockedFlushSList'');
asm
mov esp, ebp
pop ebp
jmp [_InterlockedFlushSList]
end;
end;
{$ELSE}
function InterlockedFlushSList; external kernel32 name ''InterlockedFlushSList'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_QueryDepthSList: Pointer;

function QueryDepthSList;
begin
GetProcedureAddress(_QueryDepthSList, kernel32, ''QueryDepthSList'');
asm
mov esp, ebp
pop ebp
jmp [_QueryDepthSList]
end;
end;
{$ELSE}
function QueryDepthSList; external kernel32 name ''QueryDepthSList'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FreeResource: Pointer;

function FreeResource;
begin
GetProcedureAddress(_FreeResource, kernel32, ''FreeResource'');
asm
mov esp, ebp
pop ebp
jmp [_FreeResource]
end;
end;
{$ELSE}
function FreeResource; external kernel32 name ''FreeResource'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LockResource: Pointer;

function LockResource;
begin
GetProcedureAddress(_LockResource, kernel32, ''LockResource'');
asm
mov esp, ebp
pop ebp
jmp [_LockResource]
end;
end;
{$ELSE}
function LockResource; external kernel32 name ''LockResource'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FreeLibrary: Pointer;

function FreeLibrary;
begin
GetProcedureAddress(_FreeLibrary, kernel32, ''FreeLibrary'');
asm
mov esp, ebp
pop ebp
jmp [_FreeLibrary]
end;
end;
{$ELSE}
function FreeLibrary; external kernel32 name ''FreeLibrary'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FreeLibraryAndExitThread: Pointer;

procedure FreeLibraryAndExitThread;
begin
GetProcedureAddress(_FreeLibraryAndExitThread, kernel32, ''FreeLibraryAndExitThread'');
asm
mov esp, ebp
pop ebp

jmp [_FreeLibraryAndExitThread]
end;
end;
{$ELSE}
procedure FreeLibraryAndExitThread; external kernel32 name ''FreeLibraryAndExitThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DisableThreadLibraryCalls: Pointer;

function DisableThreadLibraryCalls;
begin
GetProcedureAddress(_DisableThreadLibraryCalls, kernel32, ''DisableThreadLibraryCalls'');
asm
mov esp, ebp
pop ebp
jmp [_DisableThreadLibraryCalls]
end;
end;
{$ELSE}
function DisableThreadLibraryCalls; external kernel32 name ''DisableThreadLibraryCalls'';
{$ENDIF DYNAMIC_LINK}

// MVB TODO Dynamic linking for GetProcAddress doesn''t make much sense, does it? Same for LoadLibrary.

{$IFDEF DYNAMIC_LINK}
var
_GetProcAddress: Pointer;

function GetProcAddress;
begin
GetProcedureAddress(_GetProcAddress, kernel32, ''GetProcAddress'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcAddress]
end;
end;
{$ELSE}
function GetProcAddress; external kernel32 name ''GetProcAddress'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetVersion: Pointer;

function GetVersion;
begin
GetProcedureAddress(_GetVersion, kernel32, ''GetVersion'');
asm
mov esp, ebp
pop ebp
jmp [_GetVersion]
end;
end;
{$ELSE}
function GetVersion; external kernel32 name ''GetVersion'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalAlloc: Pointer;

function GlobalAlloc;
begin
GetProcedureAddress(_GlobalAlloc, kernel32, ''GlobalAlloc'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalAlloc]
end;
end;
{$ELSE}
function GlobalAlloc; external kernel32 name ''GlobalAlloc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalReAlloc: Pointer;

function GlobalReAlloc;
begin
GetProcedureAddress(_GlobalReAlloc, kernel32, ''GlobalReAlloc'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalReAlloc]
end;
end;
{$ELSE}
function GlobalReAlloc; external kernel32 name ''GlobalReAlloc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalSize: Pointer;

function GlobalSize;
begin
GetProcedureAddress(_GlobalSize, kernel32, ''GlobalSize'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalSize]
end;
end;
{$ELSE}
function GlobalSize; external kernel32 name ''GlobalSize'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalFlags: Pointer;

function GlobalFlags;
begin
GetProcedureAddress(_GlobalFlags, kernel32, ''GlobalFlags'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalFlags]
end;
end;
{$ELSE}
function GlobalFlags; external kernel32 name ''GlobalFlags'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalLock: Pointer;

function GlobalLock;
begin
GetProcedureAddress(_GlobalLock, kernel32, ''GlobalLock'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalLock]
end;
end;
{$ELSE}
function GlobalLock; external kernel32 name ''GlobalLock'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalHandle: Pointer;

function GlobalHandle;
begin
GetProcedureAddress(_GlobalHandle, kernel32, ''GlobalHandle'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalHandle]
end;
end;
{$ELSE}
function GlobalHandle; external kernel32 name ''GlobalHandle'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalUnlock: Pointer;

function GlobalUnlock;
begin
GetProcedureAddress(_GlobalUnlock, kernel32, ''GlobalUnlock'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalUnlock]
end;
end;
{$ELSE}
function GlobalUnlock; external kernel32 name ''GlobalUnlock'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalFree: Pointer;

function GlobalFree;


begin
GetProcedureAddress(_GlobalFree, kernel32, ''GlobalFree'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalFree]
end;
end;
{$ELSE}
function GlobalFree; external kernel32 name ''GlobalFree'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalCompact: Pointer;

function GlobalCompact;
begin
GetProcedureAddress(_GlobalCompact, kernel32, ''GlobalCompact'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalCompact]
end;
end;
{$ELSE}
function GlobalCompact; external kernel32 name ''GlobalCompact'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalFix: Pointer;

procedure GlobalFix;
begin
GetProcedureAddress(_GlobalFix, kernel32, ''GlobalFix'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalFix]
end;
end;
{$ELSE}
procedure GlobalFix; external kernel32 name ''GlobalFix'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}


var
_GlobalUnfix: Pointer;

procedure GlobalUnfix;
begin
GetProcedureAddress(_GlobalUnfix, kernel32, ''GlobalUnfix'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalUnfix]
end;
end;
{$ELSE}
procedure GlobalUnfix; external kernel32 name ''GlobalUnfix'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalWire: Pointer;

function GlobalWire;
begin
GetProcedureAddress(_GlobalWire, kernel32, ''GlobalWire'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalWire]
end;
end;
{$ELSE}
function GlobalWire; external kernel32 name ''GlobalWire'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalUnWire: Pointer;

function GlobalUnWire;
begin
GetProcedureAddress(_GlobalUnWire, kernel32, ''GlobalUnWire'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalUnWire]
end;
end;
{$ELSE}
function GlobalUnWire; external kernel32 name ''GlobalUnWire'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalMemoryStatus: Pointer;

procedure GlobalMemoryStatus;
begin
GetProcedureAddress(_GlobalMemoryStatus, kernel32, ''GlobalMemoryStatus'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalMemoryStatus]
end;
end;
{$ELSE}
procedure GlobalMemoryStatus; external kernel32 name ''GlobalMemoryStatus'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalMemoryStatusEx: Pointer;

function GlobalMemoryStatusEx;
begin
GetProcedureAddress(_GlobalMemoryStatusEx, kernel32, ''GlobalMemoryStatusEx'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalMemoryStatusEx]
end;
end;
{$ELSE}
function GlobalMemoryStatusEx; external kernel32 name ''GlobalMemoryStatusEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalAlloc: Pointer;

function LocalAlloc;
begin
GetProcedureAddress(_LocalAlloc, kernel32, ''LocalAlloc'');

asm
mov esp, ebp
pop ebp
jmp [_LocalAlloc]
end;
end;
{$ELSE}
function LocalAlloc; external kernel32 name ''LocalAlloc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalReAlloc: Pointer;

function LocalReAlloc;
begin
GetProcedureAddress(_LocalReAlloc, kernel32, ''LocalReAlloc'');
asm
mov esp, ebp
pop ebp
jmp [_LocalReAlloc]
end;
end;
{$ELSE}
function LocalReAlloc; external kernel32 name ''LocalReAlloc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalLock: Pointer;

function LocalLock;
begin
GetProcedureAddress(_LocalLock, kernel32, ''LocalLock'');
asm
mov esp, ebp
pop ebp
jmp [_LocalLock]
end;
end;
{$ELSE}
function LocalLock; external kernel32 name ''LocalLock'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalHandle: Pointer;

function LocalHandle;
begin
GetProcedureAddress(_LocalHandle, kernel32, ''LocalHandle'');

asm
mov esp, ebp
pop ebp
jmp [_LocalHandle]
end;
end;
{$ELSE}
function LocalHandle; external kernel32 name ''LocalHandle'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalUnlock: Pointer;

function LocalUnlock;
begin
GetProcedureAddress(_LocalUnlock, kernel32, ''LocalUnlock'');
asm
mov esp, ebp
pop ebp
jmp [_LocalUnlock]
end;
end;
{$ELSE}
function LocalUnlock; external kernel32 name ''LocalUnlock'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalSize: Pointer;

function LocalSize;
begin
GetProcedureAddress(_LocalSize, kernel32, ''LocalSize'');
asm
mov esp, ebp
pop ebp
jmp [_LocalSize]
end;
end;
{$ELSE}
function LocalSize; external kernel32 name ''LocalSize'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalFlags: Pointer;

function LocalFlags;
begin
GetProcedureAddress(_LocalFlags, kernel32, ''LocalFlags'');
asm
mov esp, ebp
pop ebp
jmp [_LocalFlags]
end;
end;
{$ELSE}
function LocalFlags; external kernel32 name ''LocalFlags'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalFree: Pointer;

function LocalFree;
begin
GetProcedureAddress(_LocalFree, kernel32, ''LocalFree'');
asm
mov esp, ebp
pop ebp
jmp [_LocalFree]
end;
end;
{$ELSE}
function LocalFree; external kernel32 name ''LocalFree'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalShrink: Pointer;

function LocalShrink;
begin
GetProcedureAddress(_LocalShrink, kernel32, ''LocalShrink'');
asm
mov esp, ebp
pop ebp
jmp [_LocalShrink]
end;
end;
{$ELSE}
function LocalShrink; external kernel32 name ''LocalShrink'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalCompact: Pointer;

function LocalCompact;
begin
GetProcedureAddress(_LocalCompact, kernel32, ''LocalCompact'');


asm
mov esp, ebp
pop ebp
jmp [_LocalCompact]
end;
end;
{$ELSE}
function LocalCompact; external kernel32 name ''LocalCompact'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FlushInstructionCache: Pointer;

function FlushInstructionCache;
begin
GetProcedureAddress(_FlushInstructionCache, kernel32, ''FlushInstructionCache'');
asm
mov esp, ebp
pop ebp
jmp [_FlushInstructionCache]
end;
end;
{$ELSE}
function FlushInstructionCache; external kernel32 name ''FlushInstructionCache'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualAlloc: Pointer;

function VirtualAlloc;
begin
GetProcedureAddress(_VirtualAlloc, kernel32, ''VirtualAlloc'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualAlloc]
end;
end;
{$ELSE}
function VirtualAlloc; external kernel32 name ''VirtualAlloc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualFree: Pointer;

function VirtualFree;
begin
GetProcedureAddress(_VirtualFree, kernel32, ''VirtualFree'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualFree]
end;
end;
{$ELSE}
function VirtualFree; external kernel32 name ''VirtualFree'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualProtect: Pointer;

function VirtualProtect;
begin
GetProcedureAddress(_VirtualProtect, kernel32, ''VirtualProtect'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualProtect]
end;
end;
{$ELSE}
function VirtualProtect; external kernel32 name ''VirtualProtect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualQuery: Pointer;

function VirtualQuery;
begin
GetProcedureAddress(_VirtualQuery, kernel32, ''VirtualQuery'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualQuery]
end;
end;
{$ELSE}
function VirtualQuery; external kernel32 name ''VirtualQuery'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualAllocEx: Pointer;

function VirtualAllocEx;
begin
GetProcedureAddress(_VirtualAllocEx, kernel32, ''VirtualAllocEx'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualAllocEx]
end;
end;
{$ELSE}
function VirtualAllocEx; external kernel32 name ''VirtualAllocEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetWriteWatch: Pointer;

function GetWriteWatch;
begin
GetProcedureAddress(_GetWriteWatch, kernel32, ''GetWriteWatch'');
asm
mov esp, ebp
pop ebp
jmp [_GetWriteWatch]
end;
end;
{$ELSE}
function GetWriteWatch; external kernel32 name ''GetWriteWatch'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ResetWriteWatch: Pointer;

function ResetWriteWatch;
begin
GetProcedureAddress(_ResetWriteWatch, kernel32, ''ResetWriteWatch'');
asm
mov esp, ebp
pop ebp

jmp [_ResetWriteWatch]
end;
end;
{$ELSE}
function ResetWriteWatch; external kernel32 name ''ResetWriteWatch'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLargePageMinimum: Pointer;

function GetLargePageMinimum;
begin
GetProcedureAddress(_GetLargePageMinimum, kernel32, ''GetLargePageMinimum'');
asm
mov esp, ebp
pop ebp
jmp [_GetLargePageMinimum]
end;
end;
{$ELSE}
function GetLargePageMinimum; external kernel32 name ''GetLargePageMinimum'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualFreeEx: Pointer;

function VirtualFreeEx;
begin
GetProcedureAddress(_VirtualFreeEx, kernel32, ''VirtualFreeEx'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualFreeEx]
end;
end;
{$ELSE}
function VirtualFreeEx; external kernel32 name ''VirtualFreeEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualProtectEx: Pointer;

function VirtualProtectEx;
begin
GetProcedureAddress(_VirtualProtectEx, kernel32, ''VirtualProtectEx'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualProtectEx]
end;
end;
{$ELSE}
function VirtualProtectEx; external kernel32 name ''VirtualProtectEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualQueryEx: Pointer;

function VirtualQueryEx;
begin
GetProcedureAddress(_VirtualQueryEx, kernel32, ''VirtualQueryEx'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualQueryEx]
end;
end;
{$ELSE}
function VirtualQueryEx; external kernel32 name ''VirtualQueryEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapCreate: Pointer;

function HeapCreate;
begin
GetProcedureAddress(_HeapCreate, kernel32, ''HeapCreate'');
asm
mov esp, ebp
pop ebp
jmp [_HeapCreate]
end;
end;
{$ELSE}
function HeapCreate; external kernel32 name ''HeapCreate'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapDestroy: Pointer;

function HeapDestroy;
begin
GetProcedureAddress(_HeapDestroy, kernel32, ''HeapDestroy'');
asm
mov esp, ebp
pop ebp
jmp [_HeapDestroy]
end;
end;
{$ELSE}
function HeapDestroy; external kernel32 name ''HeapDestroy'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapAlloc: Pointer;

function HeapAlloc;
begin
GetProcedureAddress(_HeapAlloc, kernel32, ''HeapAlloc'');
asm
mov esp, ebp
pop ebp
jmp [_HeapAlloc]
end;
end;
{$ELSE}
function HeapAlloc; external kernel32 name ''HeapAlloc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapReAlloc: Pointer;

function HeapReAlloc;
begin
GetProcedureAddress(_HeapReAlloc, kernel32, ''HeapReAlloc'');
asm
mov esp, ebp
pop ebp
jmp [_HeapReAlloc]
end;
end;
{$ELSE}
function HeapReAlloc; external kernel32 name ''HeapReAlloc'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapFree: Pointer;

function HeapFree;
begin
GetProcedureAddress(_HeapFree, kernel32, ''HeapFree'');
asm
mov esp, ebp
pop ebp
jmp [_HeapFree]
end;
end;
{$ELSE}
function HeapFree; external kernel32 name ''HeapFree'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapSize: Pointer;

function HeapSize;
begin
GetProcedureAddress(_HeapSize, kernel32, ''HeapSize'');
asm
mov esp, ebp
pop ebp
jmp [_HeapSize]
end;
end;
{$ELSE}
function HeapSize; external kernel32 name ''HeapSize'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapValidate: Pointer;

function HeapValidate;
begin
GetProcedureAddress(_HeapValidate, kernel32, ''HeapValidate'');
asm
mov esp, ebp
pop ebp
jmp [_HeapValidate]
end;
end;
{$ELSE}
function HeapValidate; external kernel32 name ''HeapValidate'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapCompact: Pointer;

function HeapCompact;
begin
GetProcedureAddress(_HeapCompact, kernel32, ''HeapCompact'');
asm
mov esp, ebp
pop ebp
jmp [_HeapCompact]
end;
end;
{$ELSE}
function HeapCompact; external kernel32 name ''HeapCompact'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessHeap: Pointer;

function GetProcessHeap;
begin
GetProcedureAddress(_GetProcessHeap, kernel32, ''GetProcessHeap'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessHeap]
end;
end;
{$ELSE}
function GetProcessHeap; external kernel32 name ''GetProcessHeap'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessHeaps: Pointer;

function GetProcessHeaps;
begin
GetProcedureAddress(_GetProcessHeaps, kernel32, ''GetProcessHeaps'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessHeaps]

end;
end;
{$ELSE}
function GetProcessHeaps; external kernel32 name ''GetProcessHeaps'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapLock: Pointer;

function HeapLock;
begin
GetProcedureAddress(_HeapLock, kernel32, ''HeapLock'');
asm
mov esp, ebp
pop ebp
jmp [_HeapLock]
end;
end;
{$ELSE}
function HeapLock; external kernel32 name ''HeapLock'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapUnlock: Pointer;

function HeapUnlock;
begin
GetProcedureAddress(_HeapUnlock, kernel32, ''HeapUnlock'');
asm
mov esp, ebp
pop ebp
jmp [_HeapUnlock]
end;
end;
{$ELSE}
function HeapUnlock; external kernel32 name ''HeapUnlock'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapWalk: Pointer;

function HeapWalk;
begin
GetProcedureAddress(_HeapWalk, kernel32, ''HeapWalk'');
asm
mov esp, ebp

pop ebp
jmp [_HeapWalk]
end;
end;
{$ELSE}
function HeapWalk; external kernel32 name ''HeapWalk'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapSetInformation: Pointer;

function HeapSetInformation;
begin
GetProcedureAddress(_HeapSetInformation, kernel32, ''HeapSetInformation'');
asm
mov esp, ebp
pop ebp
jmp [_HeapSetInformation]
end;
end;
{$ELSE}
function HeapSetInformation; external kernel32 name ''HeapSetInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_HeapQueryInformation: Pointer;

function HeapQueryInformation;
begin
GetProcedureAddress(_HeapQueryInformation, kernel32, ''HeapQueryInformation'');
asm
mov esp, ebp
pop ebp
jmp [_HeapQueryInformation]
end;
end;
{$ELSE}
function HeapQueryInformation; external kernel32 name ''HeapQueryInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetBinaryTypeA: Pointer;

function GetBinaryTypeA;
begin
GetProcedureAddress(_GetBinaryTypeA, kernel32, ''GetBinaryTypeA'');
asm
mov esp, ebp
pop ebp
jmp [_GetBinaryTypeA]
end;
end;
{$ELSE}
function GetBinaryTypeA; external kernel32 name ''GetBinaryTypeA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetBinaryTypeW: Pointer;

function GetBinaryTypeW;
begin
GetProcedureAddress(_GetBinaryTypeW, kernel32, ''GetBinaryTypeW'');
asm
mov esp, ebp
pop ebp
jmp [_GetBinaryTypeW]
end;
end;
{$ELSE}
function GetBinaryTypeW; external kernel32 name ''GetBinaryTypeW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetBinaryType: Pointer;

function GetBinaryType;
begin
GetProcedureAddress(_GetBinaryType, kernel32, ''GetBinaryTypeW'');
asm
mov esp, ebp
pop ebp
jmp [_GetBinaryType]
end;
end;
{$ELSE}
function GetBinaryType; external kernel32 name ''GetBinaryTypeW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetBinaryType: Pointer;

function GetBinaryType;
begin
GetProcedureAddress(_GetBinaryType, kernel32, ''GetBinaryTypeA'');
asm
mov esp, ebp
pop ebp
jmp [_GetBinaryType]
end;
end;
{$ELSE}
function GetBinaryType; external kernel32 name ''GetBinaryTypeA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetShortPathNameA: Pointer;

function GetShortPathNameA;
begin
GetProcedureAddress(_GetShortPathNameA, kernel32, ''GetShortPathNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetShortPathNameA]
end;
end;
{$ELSE}
function GetShortPathNameA; external kernel32 name ''GetShortPathNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetShortPathNameW: Pointer;

function GetShortPathNameW;
begin
GetProcedureAddress(_GetShortPathNameW, kernel32, ''GetShortPathNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetShortPathNameW]
end;
end;
{$ELSE}
function GetShortPathNameW; external kernel32 name ''GetShortPathNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetShortPathName: Pointer;

function GetShortPathName;
begin
GetProcedureAddress(_GetShortPathName, kernel32, ''GetShortPathNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetShortPathName]
end;
end;
{$ELSE}
function GetShortPathName; external kernel32 name ''GetShortPathNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetShortPathName: Pointer;

function GetShortPathName;
begin
GetProcedureAddress(_GetShortPathName, kernel32, ''GetShortPathNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetShortPathName]
end;
end;
{$ELSE}


function GetShortPathName; external kernel32 name ''GetShortPathNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetLongPathNameA: Pointer;

function GetLongPathNameA;
begin
GetProcedureAddress(_GetLongPathNameA, kernel32, ''GetLongPathNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetLongPathNameA]
end;
end;
{$ELSE}
function GetLongPathNameA; external kernel32 name ''GetLongPathNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLongPathNameW: Pointer;

function GetLongPathNameW;
begin
GetProcedureAddress(_GetLongPathNameW, kernel32, ''GetLongPathNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetLongPathNameW]
end;
end;
{$ELSE}
function GetLongPathNameW; external kernel32 name ''GetLongPathNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetLongPathName: Pointer;

function GetLongPathName;
begin
GetProcedureAddress(_GetLongPathName, kernel32, ''GetLongPathNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetLongPathName]
end;
end;
{$ELSE}
function GetLongPathName; external kernel32 name ''GetLongPathNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetLongPathName: Pointer;

function GetLongPathName;
begin
GetProcedureAddress(_GetLongPathName, kernel32, ''GetLongPathNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetLongPathName]
end;
end;
{$ELSE}
function GetLongPathName; external kernel32 name ''GetLongPathNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessAffinityMask: Pointer;

function GetProcessAffinityMask;
begin
GetProcedureAddress(_GetProcessAffinityMask, kernel32, ''GetProcessAffinityMask'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessAffinityMask]
end;
end;
{$ELSE}
function GetProcessAffinityMask; external kernel32 name ''GetProcessAffinityMask'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetProcessAffinityMask: Pointer;

function SetProcessAffinityMask;
begin
GetProcedureAddress(_SetProcessAffinityMask, kernel32, ''SetProcessAffinityMask'');
asm
mov esp, ebp
pop ebp
jmp [_SetProcessAffinityMask]
end;
end;
{$ELSE}
function SetProcessAffinityMask; external kernel32 name ''SetProcessAffinityMask'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessTimes: Pointer;

function GetProcessTimes;
begin
GetProcedureAddress(_GetProcessTimes, kernel32, ''GetProcessTimes'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessTimes]
end;
end;
{$ELSE}
function GetProcessTimes; external kernel32 name ''GetProcessTimes'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessIoCounters: Pointer;



function GetProcessIoCounters;
begin
GetProcedureAddress(_GetProcessIoCounters, kernel32, ''GetProcessIoCounters'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessIoCounters]
end;
end;
{$ELSE}
function GetProcessIoCounters; external kernel32 name ''GetProcessIoCounters'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessWorkingSetSize: Pointer;

function GetProcessWorkingSetSize;
begin
GetProcedureAddress(_GetProcessWorkingSetSize, kernel32, ''GetProcessWorkingSetSize'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessWorkingSetSize]
end;
end;
{$ELSE}
function GetProcessWorkingSetSize; external kernel32 name ''GetProcessWorkingSetSize'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetProcessWorkingSetSize: Pointer;

function SetProcessWorkingSetSize;
begin
GetProcedureAddress(_SetProcessWorkingSetSize, kernel32, ''SetProcessWorkingSetSize'');
asm
mov esp, ebp
pop ebp
jmp [_SetProcessWorkingSetSize]
end;
end;
{$ELSE}
function SetProcessWorkingSetSize; external kernel32 name ''SetProcessWorkingSetSize'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenProcess: Pointer;

function OpenProcess;
begin
GetProcedureAddress(_OpenProcess, kernel32, ''OpenProcess'');
asm
mov esp, ebp
pop ebp
jmp [_OpenProcess]
end;
end;
{$ELSE}
function OpenProcess; external kernel32 name ''OpenProcess'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentProcess: Pointer;

function GetCurrentProcess;
begin
GetProcedureAddress(_GetCurrentProcess, kernel32, ''GetCurrentProcess'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentProcess]
end;
end;
{$ELSE}
function GetCurrentProcess; external kernel32 name ''GetCurrentProcess'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentProcessId: Pointer;

function GetCurrentProcessId;
begin
GetProcedureAddress(_GetCurrentProcessId, kernel32, ''GetCurrentProcessId'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentProcessId]
end;
end;
{$ELSE}
function GetCurrentProcessId; external kernel32 name ''GetCurrentProcessId'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExitProcess: Pointer;

procedure ExitProcess;
begin
GetProcedureAddress(_ExitProcess, kernel32, ''ExitProcess'');
asm
mov esp, ebp
pop ebp
jmp [_ExitProcess]
end;
end;
{$ELSE}
procedure ExitProcess; external kernel32 name ''ExitProcess'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TerminateProcess: Pointer;

function TerminateProcess;
begin
GetProcedureAddress(_TerminateProcess, kernel32, ''TerminateProcess'');
asm
mov esp, ebp
pop ebp
jmp [_TerminateProcess]
end;
end;
{$ELSE}
function TerminateProcess; external kernel32 name ''TerminateProcess'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetExitCodeProcess: Pointer;

function GetExitCodeProcess;
begin
GetProcedureAddress(_GetExitCodeProcess, kernel32, ''GetExitCodeProcess'');
asm
mov esp, ebp
pop ebp
jmp [_GetExitCodeProcess]
end;
end;
{$ELSE}
function GetExitCodeProcess; external kernel32 name ''GetExitCodeProcess'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FatalExit: Pointer;

procedure FatalExit;
begin
GetProcedureAddress(_FatalExit, kernel32, ''FatalExit'');
asm
mov esp, ebp
pop ebp
jmp [_FatalExit]
end;
end;
{$ELSE}
procedure FatalExit; external kernel32 name ''FatalExit'';
{$ENDIF DYNAMIC_LINK}
{$IFNDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetEnvironmentStrings: Pointer;

function GetEnvironmentStrings;
begin
GetProcedureAddress(_GetEnvironmentStrings, kernel32, ''GetEnvironmentStringsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnvironmentStrings]
end;
end;
{$ELSE}
function GetEnvironmentStrings; external kernel32 name ''GetEnvironmentStringsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetEnvironmentStringsW: Pointer;

function GetEnvironmentStringsW;
begin
GetProcedureAddress(_GetEnvironmentStringsW, kernel32, ''GetEnvironmentStringsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnvironmentStringsW]
end;
end;
{$ELSE}
function GetEnvironmentStringsW; external kernel32 name ''GetEnvironmentStringsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetEnvironmentStrings: Pointer;

function GetEnvironmentStrings;
begin
GetProcedureAddress(_GetEnvironmentStrings, kernel32, ''GetEnvironmentStringsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnvironmentStrings]
end;
end;
{$ELSE}
function GetEnvironmentStrings; external kernel32 name ''GetEnvironmentStringsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetEnvironmentStringsA: Pointer;

function GetEnvironmentStringsA;
begin
GetProcedureAddress(_GetEnvironmentStringsA, kernel32, ''GetEnvironmentStringsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnvironmentStringsA]
end;
end;
{$ELSE}
function GetEnvironmentStringsA; external kernel32 name ''GetEnvironmentStringsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FreeEnvironmentStringsA: Pointer;

function FreeEnvironmentStringsA;
begin
GetProcedureAddress(_FreeEnvironmentStringsA, kernel32, ''FreeEnvironmentStringsA'');
asm
mov esp, ebp
pop ebp
jmp [_FreeEnvironmentStringsA]
end;
end;
{$ELSE}
function FreeEnvironmentStringsA; external kernel32 name ''FreeEnvironmentStringsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FreeEnvironmentStringsW: Pointer;

function FreeEnvironmentStringsW;
begin
GetProcedureAddress(_FreeEnvironmentStringsW, kernel32, ''FreeEnvironmentStringsW'');
asm
mov esp, ebp
pop ebp
jmp [_FreeEnvironmentStringsW]
end;
end;
{$ELSE}
function FreeEnvironmentStringsW; external kernel32 name ''FreeEnvironmentStringsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FreeEnvironmentStrings: Pointer;

function FreeEnvironmentStrings;
begin
GetProcedureAddress(_FreeEnvironmentStrings, kernel32, ''FreeEnvironmentStringsW'');
asm
mov esp, ebp
pop ebp
jmp [_FreeEnvironmentStrings]
end;
end;
{$ELSE}
function FreeEnvironmentStrings; external kernel32 name ''FreeEnvironmentStringsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FreeEnvironmentStrings: Pointer;


function FreeEnvironmentStrings;
begin
GetProcedureAddress(_FreeEnvironmentStrings, kernel32, ''FreeEnvironmentStringsA'');
asm
mov esp, ebp
pop ebp
jmp [_FreeEnvironmentStrings]
end;
end;
{$ELSE}
function FreeEnvironmentStrings; external kernel32 name ''FreeEnvironmentStringsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_RaiseException: Pointer;

procedure RaiseException;
begin
GetProcedureAddress(_RaiseException, kernel32, ''RaiseException'');
asm
mov esp, ebp
pop ebp
jmp [_RaiseException]
end;
end;
{$ELSE}
procedure RaiseException; external kernel32 name ''RaiseException'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UnhandledExceptionFilter: Pointer;

function UnhandledExceptionFilter;
begin
GetProcedureAddress(_UnhandledExceptionFilter, kernel32, ''UnhandledExceptionFilter'');
asm
mov esp, ebp


pop ebp
jmp [_UnhandledExceptionFilter]
end;
end;
{$ELSE}
function UnhandledExceptionFilter; external kernel32 name ''UnhandledExceptionFilter'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetUnhandledExceptionFilter: Pointer;

function SetUnhandledExceptionFilter;
begin
GetProcedureAddress(_SetUnhandledExceptionFilter, kernel32, ''SetUnhandledExceptionFilter'');
asm
mov esp, ebp
pop ebp
jmp [_SetUnhandledExceptionFilter]
end;
end;
{$ELSE}
function SetUnhandledExceptionFilter; external kernel32 name ''SetUnhandledExceptionFilter'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFiber: Pointer;

function CreateFiber;
begin
GetProcedureAddress(_CreateFiber, kernel32, ''CreateFiber'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFiber]
end;
end;
{$ELSE}
function CreateFiber; external kernel32 name ''CreateFiber'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFiberEx: Pointer;

function CreateFiberEx;
begin
GetProcedureAddress(_CreateFiberEx, kernel32, ''CreateFiberEx'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFiberEx]
end;
end;
{$ELSE}
function CreateFiberEx; external kernel32 name ''CreateFiberEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteFiber: Pointer;

procedure DeleteFiber;
begin
GetProcedureAddress(_DeleteFiber, kernel32, ''DeleteFiber'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteFiber]
end;
end;
{$ELSE}
procedure DeleteFiber; external kernel32 name ''DeleteFiber'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ConvertThreadToFiber: Pointer;

function ConvertThreadToFiber;
begin
GetProcedureAddress(_ConvertThreadToFiber, kernel32, ''ConvertThreadToFiber'');
asm
mov esp, ebp
pop ebp
jmp [_ConvertThreadToFiber]
end;
end;
{$ELSE}
function ConvertThreadToFiber; external kernel32 name ''ConvertThreadToFiber'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ConvertThreadToFiberEx: Pointer;

function ConvertThreadToFiberEx;
begin
GetProcedureAddress(_ConvertThreadToFiberEx, kernel32, ''ConvertThreadToFiberEx'');
asm
mov esp, ebp
pop ebp
jmp [_ConvertThreadToFiberEx]
end;
end;
{$ELSE}
function ConvertThreadToFiberEx; external kernel32 name ''ConvertThreadToFiberEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ConvertFiberToThread: Pointer;

function ConvertFiberToThread;
begin
GetProcedureAddress(_ConvertFiberToThread, kernel32, ''ConvertFiberToThread'');
asm
mov esp, ebp
pop ebp
jmp [_ConvertFiberToThread]
end;
end;
{$ELSE}
function ConvertFiberToThread; external kernel32 name ''ConvertFiberToThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SwitchToFiber: Pointer;

procedure SwitchToFiber;
begin
GetProcedureAddress(_SwitchToFiber, kernel32, ''SwitchToFiber'');
asm
mov esp, ebp
pop ebp
jmp [_SwitchToFiber]
end;
end;
{$ELSE}
procedure SwitchToFiber; external kernel32 name ''SwitchToFiber'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SwitchToThread: Pointer;

function SwitchToThread;
begin
GetProcedureAddress(_SwitchToThread, kernel32, ''SwitchToThread'');
asm
mov esp, ebp
pop ebp
jmp [_SwitchToThread]
end;
end;
{$ELSE}
function SwitchToThread; external kernel32 name ''SwitchToThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateThread: Pointer;

function CreateThread;
begin
GetProcedureAddress(_CreateThread, kernel32, ''CreateThread'');
asm
mov esp, ebp
pop ebp
jmp [_CreateThread]
end;
end;
{$ELSE}
function CreateThread; external kernel32 name ''CreateThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateRemoteThread: Pointer;

function CreateRemoteThread;
begin
GetProcedureAddress(_CreateRemoteThread, kernel32, ''CreateRemoteThread'');
asm
mov esp, ebp
pop ebp
jmp [_CreateRemoteThread]
end;
end;
{$ELSE}
function CreateRemoteThread; external kernel32 name ''CreateRemoteThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentThread: Pointer;

function GetCurrentThread;
begin
GetProcedureAddress(_GetCurrentThread, kernel32, ''GetCurrentThread'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentThread]
end;
end;
{$ELSE}
function GetCurrentThread; external kernel32 name ''GetCurrentThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentThreadId: Pointer;

function GetCurrentThreadId;
begin
GetProcedureAddress(_GetCurrentThreadId, kernel32, ''GetCurrentThreadId'');


asm
mov esp, ebp
pop ebp
jmp [_GetCurrentThreadId]
end;
end;
{$ELSE}
function GetCurrentThreadId; external kernel32 name ''GetCurrentThreadId'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessIdOfThread: Pointer;

function GetProcessIdOfThread;
begin
GetProcedureAddress(_GetProcessIdOfThread, kernel32, ''GetProcessIdOfThread'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessIdOfThread]
end;
end;
{$ELSE}
function GetProcessIdOfThread; external kernel32 name ''GetProcessIdOfThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetThreadId: Pointer;

function GetThreadId;
begin
GetProcedureAddress(_GetThreadId, kernel32, ''GetThreadId'');
asm
mov esp, ebp
pop ebp
jmp [_GetThreadId]
end;
end;
{$ELSE}
function GetThreadId; external kernel32 name ''GetThreadId'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessId: Pointer;

function GetProcessId;
begin
GetProcedureAddress(_GetProcessId, kernel32, ''GetProcessId'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessId]
end;
end;
{$ELSE}
function GetProcessId; external kernel32 name ''GetProcessId'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentProcessorNumber: Pointer;

function GetCurrentProcessorNumber;
begin
GetProcedureAddress(_GetCurrentProcessorNumber, kernel32, ''GetCurrentProcessorNumber'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentProcessorNumber]
end;
end;
{$ELSE}
function GetCurrentProcessorNumber; external kernel32 name ''GetCurrentProcessorNumber'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetThreadAffinityMask: Pointer;

function SetThreadAffinityMask;
begin
GetProcedureAddress(_SetThreadAffinityMask, kernel32, ''SetThreadAffinityMask'');
asm
mov esp, ebp
pop ebp
jmp [_SetThreadAffinityMask]
end;
end;
{$ELSE}
function SetThreadAffinityMask; external kernel32 name ''SetThreadAffinityMask'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetThreadIdealProcessor: Pointer;

function SetThreadIdealProcessor;
begin
GetProcedureAddress(_SetThreadIdealProcessor, kernel32, ''SetThreadIdealProcessor'');
asm
mov esp, ebp
pop ebp
jmp [_SetThreadIdealProcessor]
end;
end;
{$ELSE}
function SetThreadIdealProcessor; external kernel32 name ''SetThreadIdealProcessor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetProcessPriorityBoost: Pointer;

function SetProcessPriorityBoost;
begin
GetProcedureAddress(_SetProcessPriorityBoost, kernel32, ''SetProcessPriorityBoost'');
asm
mov esp, ebp
pop ebp
jmp [_SetProcessPriorityBoost]
end;
end;
{$ELSE}
function SetProcessPriorityBoost; external kernel32 name ''SetProcessPriorityBoost'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessPriorityBoost: Pointer;

function GetProcessPriorityBoost;
begin
GetProcedureAddress(_GetProcessPriorityBoost, kernel32, ''GetProcessPriorityBoost'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessPriorityBoost]
end;
end;
{$ELSE}
function GetProcessPriorityBoost; external kernel32 name ''GetProcessPriorityBoost'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RequestWakeupLatency: Pointer;

function RequestWakeupLatency;
begin
GetProcedureAddress(_RequestWakeupLatency, kernel32, ''RequestWakeupLatency'');
asm
mov esp, ebp
pop ebp
jmp [_RequestWakeupLatency]
end;
end;
{$ELSE}
function RequestWakeupLatency; external kernel32 name ''RequestWakeupLatency'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsSystemResumeAutomatic: Pointer;

function IsSystemResumeAutomatic;
begin

GetProcedureAddress(_IsSystemResumeAutomatic, kernel32, ''IsSystemResumeAutomatic'');
asm
mov esp, ebp
pop ebp
jmp [_IsSystemResumeAutomatic]
end;
end;
{$ELSE}
function IsSystemResumeAutomatic; external kernel32 name ''IsSystemResumeAutomatic'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenThread: Pointer;

function OpenThread;
begin
GetProcedureAddress(_OpenThread, kernel32, ''OpenThread'');
asm
mov esp, ebp
pop ebp
jmp [_OpenThread]
end;
end;
{$ELSE}
function OpenThread; external kernel32 name ''OpenThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetThreadPriority: Pointer;

function SetThreadPriority;
begin
GetProcedureAddress(_SetThreadPriority, kernel32, ''SetThreadPriority'');
asm
mov esp, ebp
pop ebp
jmp [_SetThreadPriority]
end;
end;
{$ELSE}
function SetThreadPriority; external kernel32 name ''SetThreadPriority'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetThreadPriorityBoost: Pointer;

function SetThreadPriorityBoost;
begin
GetProcedureAddress(_SetThreadPriorityBoost, kernel32, ''SetThreadPriorityBoost'');
asm
mov esp, ebp
pop ebp
jmp [_SetThreadPriorityBoost]
end;
end;
{$ELSE}
function SetThreadPriorityBoost; external kernel32 name ''SetThreadPriorityBoost'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetThreadPriorityBoost: Pointer;

function GetThreadPriorityBoost;
begin
GetProcedureAddress(_GetThreadPriorityBoost, kernel32, ''GetThreadPriorityBoost'');
asm
mov esp, ebp
pop ebp
jmp [_GetThreadPriorityBoost]
end;
end;
{$ELSE}
function GetThreadPriorityBoost; external kernel32 name ''GetThreadPriorityBoost'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetThreadPriority: Pointer;

function GetThreadPriority;
begin
GetProcedureAddress(_GetThreadPriority, kernel32, ''GetThreadPriority'');
asm
mov esp, ebp
pop ebp
jmp [_GetThreadPriority]
end;
end;
{$ELSE}
function GetThreadPriority; external kernel32 name ''GetThreadPriority'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetThreadTimes: Pointer;

function GetThreadTimes;
begin
GetProcedureAddress(_GetThreadTimes, kernel32, ''GetThreadTimes'');
asm
mov esp, ebp
pop ebp
jmp [_GetThreadTimes]
end;
end;
{$ELSE}
function GetThreadTimes; external kernel32 name ''GetThreadTimes'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExitThread: Pointer;

procedure ExitThread;
begin
GetProcedureAddress(_ExitThread, kernel32, ''ExitThread'');
asm
mov esp, ebp
pop ebp
jmp [_ExitThread]
end;
end;
{$ELSE}
procedure ExitThread; external kernel32 name ''ExitThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TerminateThread: Pointer;

function TerminateThread;
begin
GetProcedureAddress(_TerminateThread, kernel32, ''TerminateThread'');
asm
mov esp, ebp
pop ebp
jmp [_TerminateThread]
end;
end;
{$ELSE}
function TerminateThread; external kernel32 name ''TerminateThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetExitCodeThread: Pointer;

function GetExitCodeThread;
begin
GetProcedureAddress(_GetExitCodeThread, kernel32, ''GetExitCodeThread'');
asm
mov esp, ebp
pop ebp
jmp [_GetExitCodeThread]
end;
end;
{$ELSE}
function GetExitCodeThread; external kernel32 name ''GetExitCodeThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetThreadSelectorEntry: Pointer;

function GetThreadSelectorEntry;
begin
GetProcedureAddress(_GetThreadSelectorEntry, kernel32, ''GetThreadSelectorEntry'');
asm
mov esp, ebp
pop ebp
jmp [_GetThreadSelectorEntry]
end;
end;
{$ELSE}
function GetThreadSelectorEntry; external kernel32 name ''GetThreadSelectorEntry'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetThreadExecutionState: Pointer;

function SetThreadExecutionState;
begin
GetProcedureAddress(_SetThreadExecutionState, kernel32, ''SetThreadExecutionState'');
asm
mov esp, ebp
pop ebp
jmp [_SetThreadExecutionState]
end;
end;
{$ELSE}
function SetThreadExecutionState; external kernel32 name ''SetThreadExecutionState'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLastError: Pointer;

function GetLastError;
begin
GetProcedureAddress(_GetLastError, kernel32, ''GetLastError'');
asm
mov esp, ebp
pop ebp
jmp [_GetLastError]
end;
end;
{$ELSE}
function GetLastError; external kernel32 name ''GetLastError'';
{$ENDIF DYNAMIC_LINK}


{$IFDEF DYNAMIC_LINK}
var
_SetLastError: Pointer;

procedure SetLastError;
begin
GetProcedureAddress(_SetLastError, kernel32, ''SetLastError'');
asm
mov esp, ebp
pop ebp
jmp [_SetLastError]
end;
end;
{$ELSE}
procedure SetLastError; external kernel32 name ''SetLastError'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RestoreLastError: Pointer;

procedure RestoreLastError;
begin
GetProcedureAddress(_RestoreLastError, kernel32, ''RestoreLastError'');
asm
mov esp, ebp
pop ebp
jmp [_RestoreLastError]
end;
end;
{$ELSE}
procedure RestoreLastError; external kernel32 name ''RestoreLastError'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetOverlappedResult: Pointer;

function GetOverlappedResult;
begin
GetProcedureAddress(_GetOverlappedResult, kernel32, ''GetOverlappedResult'');
asm
mov esp, ebp
pop ebp


jmp [_GetOverlappedResult]
end;
end;
{$ELSE}
function GetOverlappedResult; external kernel32 name ''GetOverlappedResult'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateIoCompletionPort: Pointer;

function CreateIoCompletionPort;
begin
GetProcedureAddress(_CreateIoCompletionPort, kernel32, ''CreateIoCompletionPort'');
asm
mov esp, ebp
pop ebp
jmp [_CreateIoCompletionPort]
end;
end;
{$ELSE}
function CreateIoCompletionPort; external kernel32 name ''CreateIoCompletionPort'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetQueuedCompletionStatus: Pointer;

function GetQueuedCompletionStatus;
begin
GetProcedureAddress(_GetQueuedCompletionStatus, kernel32, ''GetQueuedCompletionStatus'');
asm
mov esp, ebp
pop ebp
jmp [_GetQueuedCompletionStatus]
end;
end;
{$ELSE}
function GetQueuedCompletionStatus; external kernel32 name ''GetQueuedCompletionStatus'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PostQueuedCompletionStatus: Pointer;

function PostQueuedCompletionStatus;
begin
GetProcedureAddress(_PostQueuedCompletionStatus, kernel32, ''PostQueuedCompletionStatus'');
asm
mov esp, ebp
pop ebp
jmp [_PostQueuedCompletionStatus]
end;
end;
{$ELSE}
function PostQueuedCompletionStatus; external kernel32 name ''PostQueuedCompletionStatus'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetErrorMode: Pointer;

function SetErrorMode;
begin
GetProcedureAddress(_SetErrorMode, kernel32, ''SetErrorMode'');
asm
mov esp, ebp
pop ebp
jmp [_SetErrorMode]
end;
end;
{$ELSE}
function SetErrorMode; external kernel32 name ''SetErrorMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReadProcessMemory: Pointer;

function ReadProcessMemory;
begin
GetProcedureAddress(_ReadProcessMemory, kernel32, ''ReadProcessMemory'');
asm
mov esp, ebp
pop ebp
jmp [_ReadProcessMemory]
end;
end;
{$ELSE}
function ReadProcessMemory; external kernel32 name ''ReadProcessMemory'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WriteProcessMemory: Pointer;

function WriteProcessMemory;
begin
GetProcedureAddress(_WriteProcessMemory, kernel32, ''WriteProcessMemory'');
asm
mov esp, ebp
pop ebp
jmp [_WriteProcessMemory]
end;
end;
{$ELSE}
function WriteProcessMemory; external kernel32 name ''WriteProcessMemory'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetThreadContext: Pointer;

function GetThreadContext;
begin
GetProcedureAddress(_GetThreadContext, kernel32, ''GetThreadContext'');
asm
mov esp, ebp
pop ebp
jmp [_GetThreadContext]
end;
end;
{$ELSE}
function GetThreadContext; external kernel32 name ''GetThreadContext'';
{$ENDIF DYNAMIC_LINK}


{$IFDEF DYNAMIC_LINK}
var
_SetThreadContext: Pointer;

function SetThreadContext;
begin
GetProcedureAddress(_SetThreadContext, kernel32, ''SetThreadContext'');
asm
mov esp, ebp
pop ebp
jmp [_SetThreadContext]
end;
end;
{$ELSE}
function SetThreadContext; external kernel32 name ''SetThreadContext'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SuspendThread: Pointer;

function SuspendThread;
begin
GetProcedureAddress(_SuspendThread, kernel32, ''SuspendThread'');
asm
mov esp, ebp
pop ebp
jmp [_SuspendThread]
end;
end;
{$ELSE}
function SuspendThread; external kernel32 name ''SuspendThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ResumeThread: Pointer;

function ResumeThread;
begin
GetProcedureAddress(_ResumeThread, kernel32, ''ResumeThread'');
asm
mov esp, ebp
pop ebp
jmp [_ResumeThread]

end;
end;
{$ELSE}
function ResumeThread; external kernel32 name ''ResumeThread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_QueueUserAPC: Pointer;

function QueueUserAPC;
begin
GetProcedureAddress(_QueueUserAPC, kernel32, ''QueueUserAPC'');
asm
mov esp, ebp
pop ebp
jmp [_QueueUserAPC]
end;
end;
{$ELSE}
function QueueUserAPC; external kernel32 name ''QueueUserAPC'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsDebuggerPresent: Pointer;

function IsDebuggerPresent;
begin
GetProcedureAddress(_IsDebuggerPresent, kernel32, ''IsDebuggerPresent'');
asm
mov esp, ebp
pop ebp
jmp [_IsDebuggerPresent]
end;
end;
{$ELSE}
function IsDebuggerPresent; external kernel32 name ''IsDebuggerPresent'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DebugBreak: Pointer;

procedure DebugBreak;
begin
GetProcedureAddress(_DebugBreak, kernel32, ''DebugBreak'');


asm
mov esp, ebp
pop ebp
jmp [_DebugBreak]
end;
end;
{$ELSE}
procedure DebugBreak; external kernel32 name ''DebugBreak'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WaitForDebugEvent: Pointer;

function WaitForDebugEvent;
begin
GetProcedureAddress(_WaitForDebugEvent, kernel32, ''WaitForDebugEvent'');
asm
mov esp, ebp
pop ebp
jmp [_WaitForDebugEvent]
end;
end;
{$ELSE}
function WaitForDebugEvent; external kernel32 name ''WaitForDebugEvent'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ContinueDebugEvent: Pointer;

function ContinueDebugEvent;
begin
GetProcedureAddress(_ContinueDebugEvent, kernel32, ''ContinueDebugEvent'');
asm
mov esp, ebp
pop ebp
jmp [_ContinueDebugEvent]
end;
end;
{$ELSE}
function ContinueDebugEvent; external kernel32 name ''ContinueDebugEvent'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}


var
_DebugActiveProcess: Pointer;

function DebugActiveProcess;
begin
GetProcedureAddress(_DebugActiveProcess, kernel32, ''DebugActiveProcess'');
asm
mov esp, ebp
pop ebp
jmp [_DebugActiveProcess]
end;
end;
{$ELSE}
function DebugActiveProcess; external kernel32 name ''DebugActiveProcess'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DebugActiveProcessStop: Pointer;

function DebugActiveProcessStop;
begin
GetProcedureAddress(_DebugActiveProcessStop, kernel32, ''DebugActiveProcessStop'');
asm
mov esp, ebp
pop ebp
jmp [_DebugActiveProcessStop]
end;
end;
{$ELSE}
function DebugActiveProcessStop; external kernel32 name ''DebugActiveProcessStop'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DebugSetProcessKillOnExit: Pointer;

function DebugSetProcessKillOnExit;
begin
GetProcedureAddress(_DebugSetProcessKillOnExit, kernel32, ''DebugSetProcessKillOnExit'');

asm
mov esp, ebp
pop ebp
jmp [_DebugSetProcessKillOnExit]
end;
end;
{$ELSE}
function DebugSetProcessKillOnExit; external kernel32 name ''DebugSetProcessKillOnExit'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DebugBreakProcess: Pointer;

function DebugBreakProcess;
begin
GetProcedureAddress(_DebugBreakProcess, kernel32, ''DebugBreakProcess'');
asm
mov esp, ebp
pop ebp
jmp [_DebugBreakProcess]
end;
end;
{$ELSE}
function DebugBreakProcess; external kernel32 name ''DebugBreakProcess'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InitializeCriticalSection: Pointer;

procedure InitializeCriticalSection;
begin
GetProcedureAddress(_InitializeCriticalSection, kernel32, ''InitializeCriticalSection'');
asm
mov esp, ebp
pop ebp
jmp [_InitializeCriticalSection]
end;
end;
{$ELSE}
procedure InitializeCriticalSection; external kernel32 name ''InitializeCriticalSection'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnterCriticalSection: Pointer;

procedure EnterCriticalSection;
begin
GetProcedureAddress(_EnterCriticalSection, kernel32, ''EnterCriticalSection'');
asm
mov esp, ebp
pop ebp
jmp [_EnterCriticalSection]
end;
end;
{$ELSE}
procedure EnterCriticalSection; external kernel32 name ''EnterCriticalSection'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LeaveCriticalSection: Pointer;

procedure LeaveCriticalSection;
begin
GetProcedureAddress(_LeaveCriticalSection, kernel32, ''LeaveCriticalSection'');
asm
mov esp, ebp
pop ebp
jmp [_LeaveCriticalSection]
end;
end;
{$ELSE}
procedure LeaveCriticalSection; external kernel32 name ''LeaveCriticalSection'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InitCritSectAndSpinCount: Pointer;

function InitializeCriticalSectionAndSpinCount;
begin


GetProcedureAddress(_InitCritSectAndSpinCount, kernel32, ''InitializeCriticalSectionAndSpinCount'');
asm
mov esp, ebp
pop ebp
jmp [_InitCritSectAndSpinCount]
end;
end;
{$ELSE}
function InitializeCriticalSectionAndSpinCount; external kernel32 name ''InitializeCriticalSectionAndSpinCount'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetCriticalSectionSpinCount: Pointer;

function SetCriticalSectionSpinCount;
begin
GetProcedureAddress(_SetCriticalSectionSpinCount, kernel32, ''SetCriticalSectionSpinCount'');
asm
mov esp, ebp
pop ebp
jmp [_SetCriticalSectionSpinCount]
end;
end;
{$ELSE}
function SetCriticalSectionSpinCount; external kernel32 name ''SetCriticalSectionSpinCount'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TryEnterCriticalSection: Pointer;

function TryEnterCriticalSection;
begin
GetProcedureAddress(_TryEnterCriticalSection, kernel32, ''TryEnterCriticalSection'');
asm
mov esp, ebp
pop ebp
jmp [_TryEnterCriticalSection]
end;
end;
{$ELSE}
function TryEnterCriticalSection; external kernel32 name ''TryEnterCriticalSection'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteCriticalSection: Pointer;

procedure DeleteCriticalSection;
begin
GetProcedureAddress(_DeleteCriticalSection, kernel32, ''DeleteCriticalSection'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteCriticalSection]
end;
end;
{$ELSE}
procedure DeleteCriticalSection; external kernel32 name ''DeleteCriticalSection'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetEvent: Pointer;

function SetEvent;
begin
GetProcedureAddress(_SetEvent, kernel32, ''SetEvent'');
asm
mov esp, ebp
pop ebp
jmp [_SetEvent]
end;
end;
{$ELSE}
function SetEvent; external kernel32 name ''SetEvent'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ResetEvent: Pointer;

function ResetEvent;
begin
GetProcedureAddress(_ResetEvent, kernel32, ''ResetEvent'');
asm
mov esp, ebp
pop ebp
jmp [_ResetEvent]
end;
end;
{$ELSE}
function ResetEvent; external kernel32 name ''ResetEvent'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PulseEvent: Pointer;

function PulseEvent;
begin
GetProcedureAddress(_PulseEvent, kernel32, ''PulseEvent'');
asm
mov esp, ebp
pop ebp
jmp [_PulseEvent]
end;
end;
{$ELSE}
function PulseEvent; external kernel32 name ''PulseEvent'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReleaseSemaphore: Pointer;

function ReleaseSemaphore;
begin
GetProcedureAddress(_ReleaseSemaphore, kernel32, ''ReleaseSemaphore'');
asm
mov esp, ebp
pop ebp
jmp [_ReleaseSemaphore]
end;
end;
{$ELSE}
function ReleaseSemaphore; external kernel32 name ''ReleaseSemaphore'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReleaseMutex: Pointer;

function ReleaseMutex;
begin
GetProcedureAddress(_ReleaseMutex, kernel32, ''ReleaseMutex'');
asm
mov esp, ebp
pop ebp
jmp [_ReleaseMutex]
end;
end;
{$ELSE}
function ReleaseMutex; external kernel32 name ''ReleaseMutex'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WaitForSingleObject: Pointer;

function WaitForSingleObject;
begin
GetProcedureAddress(_WaitForSingleObject, kernel32, ''WaitForSingleObject'');
asm
mov esp, ebp
pop ebp
jmp [_WaitForSingleObject]
end;
end;
{$ELSE}
function WaitForSingleObject; external kernel32 name ''WaitForSingleObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WaitForMultipleObjects: Pointer;

function WaitForMultipleObjects;
begin
GetProcedureAddress(_WaitForMultipleObjects, kernel32, ''WaitForMultipleObjects'');

asm
mov esp, ebp
pop ebp
jmp [_WaitForMultipleObjects]
end;
end;
{$ELSE}
function WaitForMultipleObjects; external kernel32 name ''WaitForMultipleObjects'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Sleep: Pointer;

procedure Sleep;
begin
GetProcedureAddress(_Sleep, kernel32, ''Sleep'');
asm
mov esp, ebp
pop ebp
jmp [_Sleep]
end;
end;
{$ELSE}
procedure Sleep; external kernel32 name ''Sleep'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LoadResource: Pointer;

function LoadResource;
begin
GetProcedureAddress(_LoadResource, kernel32, ''LoadResource'');
asm
mov esp, ebp
pop ebp
jmp [_LoadResource]
end;
end;
{$ELSE}
function LoadResource; external kernel32 name ''LoadResource'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SizeofResource: Pointer;

function SizeofResource;
begin
GetProcedureAddress(_SizeofResource, kernel32, ''SizeofResource'');
asm
mov esp, ebp
pop ebp
jmp [_SizeofResource]
end;
end;
{$ELSE}
function SizeofResource; external kernel32 name ''SizeofResource'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalDeleteAtom: Pointer;

function GlobalDeleteAtom;
begin
GetProcedureAddress(_GlobalDeleteAtom, kernel32, ''GlobalDeleteAtom'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalDeleteAtom]
end;
end;
{$ELSE}
function GlobalDeleteAtom; external kernel32 name ''GlobalDeleteAtom'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InitAtomTable: Pointer;

function InitAtomTable;
begin
GetProcedureAddress(_InitAtomTable, kernel32, ''InitAtomTable'');
asm
mov esp, ebp
pop ebp
jmp [_InitAtomTable]
end;
end;
{$ELSE}
function InitAtomTable; external kernel32 name ''InitAtomTable'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteAtom: Pointer;

function DeleteAtom;
begin
GetProcedureAddress(_DeleteAtom, kernel32, ''DeleteAtom'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteAtom]
end;
end;
{$ELSE}
function DeleteAtom; external kernel32 name ''DeleteAtom'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetHandleCount: Pointer;

function SetHandleCount;
begin
GetProcedureAddress(_SetHandleCount, kernel32, ''SetHandleCount'');
asm
mov esp, ebp
pop ebp
jmp [_SetHandleCount]
end;
end;
{$ELSE}
function SetHandleCount; external kernel32 name ''SetHandleCount'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLogicalDrives: Pointer;

function GetLogicalDrives;
begin
GetProcedureAddress(_GetLogicalDrives, kernel32, ''GetLogicalDrives'');
asm
mov esp, ebp
pop ebp
jmp [_GetLogicalDrives]
end;
end;
{$ELSE}
function GetLogicalDrives; external kernel32 name ''GetLogicalDrives'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LockFile: Pointer;

function LockFile;
begin
GetProcedureAddress(_LockFile, kernel32, ''LockFile'');
asm
mov esp, ebp
pop ebp
jmp [_LockFile]
end;
end;
{$ELSE}
function LockFile; external kernel32 name ''LockFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UnlockFile: Pointer;

function UnlockFile;
begin
GetProcedureAddress(_UnlockFile, kernel32, ''UnlockFile'');
asm
mov esp, ebp
pop ebp
jmp [_UnlockFile]
end;
end;
{$ELSE}
function UnlockFile; external kernel32 name ''UnlockFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LockFileEx: Pointer;

function LockFileEx;
begin
GetProcedureAddress(_LockFileEx, kernel32, ''LockFileEx'');
asm
mov esp, ebp

pop ebp
jmp [_LockFileEx]
end;
end;
{$ELSE}
function LockFileEx; external kernel32 name ''LockFileEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UnlockFileEx: Pointer;

function UnlockFileEx;
begin
GetProcedureAddress(_UnlockFileEx, kernel32, ''UnlockFileEx'');
asm
mov esp, ebp
pop ebp
jmp [_UnlockFileEx]
end;
end;
{$ELSE}
function UnlockFileEx; external kernel32 name ''UnlockFileEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFileInformationByHandle: Pointer;

function GetFileInformationByHandle;
begin
GetProcedureAddress(_GetFileInformationByHandle, kernel32, ''GetFileInformationByHandle'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileInformationByHandle]
end;
end;
{$ELSE}
function GetFileInformationByHandle; external kernel32 name ''GetFileInformationByHandle'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFileType: Pointer;

function GetFileType;
begin
GetProcedureAddress(_GetFileType, kernel32, ''GetFileType'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileType]
end;
end;
{$ELSE}
function GetFileType; external kernel32 name ''GetFileType'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFileSize: Pointer;

function GetFileSize;
begin
GetProcedureAddress(_GetFileSize, kernel32, ''GetFileSize'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileSize]
end;
end;
{$ELSE}
function GetFileSize; external kernel32 name ''GetFileSize'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFileSizeEx: Pointer;

function GetFileSizeEx;
begin
GetProcedureAddress(_GetFileSizeEx, kernel32, ''GetFileSizeEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileSizeEx]
end;
end;
{$ELSE}
function GetFileSizeEx; external kernel32 name ''GetFileSizeEx'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetStdHandle: Pointer;

function GetStdHandle;
begin
GetProcedureAddress(_GetStdHandle, kernel32, ''GetStdHandle'');
asm
mov esp, ebp
pop ebp
jmp [_GetStdHandle]
end;
end;
{$ELSE}
function GetStdHandle; external kernel32 name ''GetStdHandle'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetStdHandle: Pointer;

function SetStdHandle;
begin
GetProcedureAddress(_SetStdHandle, kernel32, ''SetStdHandle'');
asm
mov esp, ebp
pop ebp
jmp [_SetStdHandle]
end;
end;
{$ELSE}
function SetStdHandle; external kernel32 name ''SetStdHandle'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WriteFile: Pointer;

function WriteFile;
begin
GetProcedureAddress(_WriteFile, kernel32, ''WriteFile'');
asm
mov esp, ebp
pop ebp
jmp [_WriteFile]
end;
end;
{$ELSE}
function WriteFile; external kernel32 name ''WriteFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReadFile: Pointer;

function ReadFile;
begin
GetProcedureAddress(_ReadFile, kernel32, ''ReadFile'');
asm
mov esp, ebp
pop ebp
jmp [_ReadFile]
end;
end;
{$ELSE}
function ReadFile; external kernel32 name ''ReadFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FlushFileBuffers: Pointer;

function FlushFileBuffers;
begin
GetProcedureAddress(_FlushFileBuffers, kernel32, ''FlushFileBuffers'');
asm
mov esp, ebp
pop ebp
jmp [_FlushFileBuffers]
end;
end;
{$ELSE}
function FlushFileBuffers; external kernel32 name ''FlushFileBuffers'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeviceIoControl: Pointer;

function DeviceIoControl;
begin
GetProcedureAddress(_DeviceIoControl, kernel32, ''DeviceIoControl'');
asm
mov esp, ebp
pop ebp
jmp [_DeviceIoControl]
end;
end;
{$ELSE}
function DeviceIoControl; external kernel32 name ''DeviceIoControl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RequestDeviceWakeup: Pointer;

function RequestDeviceWakeup;
begin
GetProcedureAddress(_RequestDeviceWakeup, kernel32, ''RequestDeviceWakeup'');
asm
mov esp, ebp
pop ebp
jmp [_RequestDeviceWakeup]
end;
end;
{$ELSE}
function RequestDeviceWakeup; external kernel32 name ''RequestDeviceWakeup'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CancelDeviceWakeupRequest: Pointer;

function CancelDeviceWakeupRequest;
begin
GetProcedureAddress(_CancelDeviceWakeupRequest, kernel32, ''CancelDeviceWakeupRequest'');
asm
mov esp, ebp
pop ebp
jmp [_CancelDeviceWakeupRequest]
end;
end;
{$ELSE}
function CancelDeviceWakeupRequest; external kernel32 name ''CancelDeviceWakeupRequest'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDevicePowerState: Pointer;

function GetDevicePowerState;
begin
GetProcedureAddress(_GetDevicePowerState, kernel32, ''GetDevicePowerState'');
asm
mov esp, ebp
pop ebp
jmp [_GetDevicePowerState]
end;
end;
{$ELSE}
function GetDevicePowerState; external kernel32 name ''GetDevicePowerState'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetMessageWaitingIndicator: Pointer;

function SetMessageWaitingIndicator;
begin
GetProcedureAddress(_SetMessageWaitingIndicator, kernel32, ''SetMessageWaitingIndicator'');
asm
mov esp, ebp
pop ebp
jmp [_SetMessageWaitingIndicator]
end;
end;
{$ELSE}
function SetMessageWaitingIndicator; external kernel32 name ''SetMessageWaitingIndicator'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetEndOfFile: Pointer;

function SetEndOfFile;
begin
GetProcedureAddress(_SetEndOfFile, kernel32, ''SetEndOfFile'');
asm
mov esp, ebp
pop ebp
jmp [_SetEndOfFile]
end;
end;
{$ELSE}
function SetEndOfFile; external kernel32 name ''SetEndOfFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFilePointer: Pointer;

function SetFilePointer;
begin
GetProcedureAddress(_SetFilePointer, kernel32, ''SetFilePointer'');
asm
mov esp, ebp
pop ebp
jmp [_SetFilePointer]
end;
end;
{$ELSE}
function SetFilePointer; external kernel32 name ''SetFilePointer'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFilePointerEx: Pointer;

function SetFilePointerEx;
begin
GetProcedureAddress(_SetFilePointerEx, kernel32, ''SetFilePointerEx'');
asm
mov esp, ebp
pop ebp
jmp [_SetFilePointerEx]
end;
end;
{$ELSE}
function SetFilePointerEx; external kernel32 name ''SetFilePointerEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindClose: Pointer;


function FindClose;
begin
GetProcedureAddress(_FindClose, kernel32, ''FindClose'');
asm
mov esp, ebp
pop ebp
jmp [_FindClose]
end;
end;
{$ELSE}
function FindClose; external kernel32 name ''FindClose'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFileTime: Pointer;

function GetFileTime;
begin
GetProcedureAddress(_GetFileTime, kernel32, ''GetFileTime'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileTime]
end;
end;
{$ELSE}
function GetFileTime; external kernel32 name ''GetFileTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFileTime: Pointer;

function SetFileTime;
begin
GetProcedureAddress(_SetFileTime, kernel32, ''SetFileTime'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileTime]
end;
end;
{$ELSE}
function SetFileTime; external kernel32 name ''SetFileTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFileValidData: Pointer;

function SetFileValidData;
begin
GetProcedureAddress(_SetFileValidData, kernel32, ''SetFileValidData'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileValidData]
end;
end;
{$ELSE}
function SetFileValidData; external kernel32 name ''SetFileValidData'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFileShortNameA: Pointer;

function SetFileShortNameA;
begin
GetProcedureAddress(_SetFileShortNameA, kernel32, ''SetFileShortNameA'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileShortNameA]
end;
end;
{$ELSE}
function SetFileShortNameA; external kernel32 name ''SetFileShortNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFileShortNameW: Pointer;

function SetFileShortNameW;
begin
GetProcedureAddress(_SetFileShortNameW, kernel32, ''SetFileShortNameW'');
asm
mov esp, ebp

pop ebp
jmp [_SetFileShortNameW]
end;
end;
{$ELSE}
function SetFileShortNameW; external kernel32 name ''SetFileShortNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetFileShortName: Pointer;

function SetFileShortName;
begin
GetProcedureAddress(_SetFileShortName, kernel32, ''SetFileShortNameW'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileShortName]
end;
end;
{$ELSE}
function SetFileShortName; external kernel32 name ''SetFileShortNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetFileShortName: Pointer;

function SetFileShortName;
begin
GetProcedureAddress(_SetFileShortName, kernel32, ''SetFileShortNameA'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileShortName]
end;
end;
{$ELSE}
function SetFileShortName; external kernel32 name ''SetFileShortNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}


{$IFDEF DYNAMIC_LINK}
var
_CloseHandle: Pointer;

function CloseHandle;
begin
GetProcedureAddress(_CloseHandle, kernel32, ''CloseHandle'');
asm
mov esp, ebp
pop ebp
jmp [_CloseHandle]
end;
end;
{$ELSE}
function CloseHandle; external kernel32 name ''CloseHandle'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DuplicateHandle: Pointer;

function DuplicateHandle;
begin
GetProcedureAddress(_DuplicateHandle, kernel32, ''DuplicateHandle'');
asm
mov esp, ebp
pop ebp
jmp [_DuplicateHandle]
end;
end;
{$ELSE}
function DuplicateHandle; external kernel32 name ''DuplicateHandle'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetHandleInformation: Pointer;

function GetHandleInformation;
begin
GetProcedureAddress(_GetHandleInformation, kernel32, ''GetHandleInformation'');
asm
mov esp, ebp
pop ebp
jmp [_GetHandleInformation]
end;
end;
{$ELSE}
function GetHandleInformation; external kernel32 name ''GetHandleInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetHandleInformation: Pointer;

function SetHandleInformation;
begin
GetProcedureAddress(_SetHandleInformation, kernel32, ''SetHandleInformation'');
asm
mov esp, ebp
pop ebp
jmp [_SetHandleInformation]
end;
end;
{$ELSE}
function SetHandleInformation; external kernel32 name ''SetHandleInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LoadModule: Pointer;

function LoadModule;
begin
GetProcedureAddress(_LoadModule, kernel32, ''LoadModule'');
asm
mov esp, ebp
pop ebp
jmp [_LoadModule]
end;
end;
{$ELSE}
function LoadModule; external kernel32 name ''LoadModule'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WinExec: Pointer;

function WinExec;
begin
GetProcedureAddress(_WinExec, kernel32, ''WinExec'');


asm
mov esp, ebp
pop ebp
jmp [_WinExec]
end;
end;
{$ELSE}
function WinExec; external kernel32 name ''WinExec'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ClearCommBreak: Pointer;

function ClearCommBreak;
begin
GetProcedureAddress(_ClearCommBreak, kernel32, ''ClearCommBreak'');
asm
mov esp, ebp
pop ebp
jmp [_ClearCommBreak]
end;
end;
{$ELSE}
function ClearCommBreak; external kernel32 name ''ClearCommBreak'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ClearCommError: Pointer;

function ClearCommError;
begin
GetProcedureAddress(_ClearCommError, kernel32, ''ClearCommError'');
asm
mov esp, ebp
pop ebp
jmp [_ClearCommError]
end;
end;
{$ELSE}
function ClearCommError; external kernel32 name ''ClearCommError'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetupComm: Pointer;

function SetupComm;


begin
GetProcedureAddress(_SetupComm, kernel32, ''SetupComm'');
asm
mov esp, ebp
pop ebp
jmp [_SetupComm]
end;
end;
{$ELSE}
function SetupComm; external kernel32 name ''SetupComm'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EscapeCommFunction: Pointer;

function EscapeCommFunction;
begin
GetProcedureAddress(_EscapeCommFunction, kernel32, ''EscapeCommFunction'');
asm
mov esp, ebp
pop ebp
jmp [_EscapeCommFunction]
end;
end;
{$ELSE}
function EscapeCommFunction; external kernel32 name ''EscapeCommFunction'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCommConfig: Pointer;

function GetCommConfig;
begin
GetProcedureAddress(_GetCommConfig, kernel32, ''GetCommConfig'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommConfig]
end;
end;
{$ELSE}
function GetCommConfig; external kernel32 name ''GetCommConfig'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCommMask: Pointer;

function GetCommMask;
begin
GetProcedureAddress(_GetCommMask, kernel32, ''GetCommMask'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommMask]
end;
end;
{$ELSE}
function GetCommMask; external kernel32 name ''GetCommMask'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCommProperties: Pointer;

function GetCommProperties;
begin
GetProcedureAddress(_GetCommProperties, kernel32, ''GetCommProperties'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommProperties]
end;
end;
{$ELSE}
function GetCommProperties; external kernel32 name ''GetCommProperties'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCommModemStatus: Pointer;

function GetCommModemStatus;
begin
GetProcedureAddress(_GetCommModemStatus, kernel32, ''GetCommModemStatus'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommModemStatus]
end;
end;
{$ELSE}
function GetCommModemStatus; external kernel32 name ''GetCommModemStatus'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCommState: Pointer;

function GetCommState;
begin
GetProcedureAddress(_GetCommState, kernel32, ''GetCommState'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommState]
end;
end;
{$ELSE}
function GetCommState; external kernel32 name ''GetCommState'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCommTimeouts: Pointer;

function GetCommTimeouts;
begin
GetProcedureAddress(_GetCommTimeouts, kernel32, ''GetCommTimeouts'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommTimeouts]
end;
end;
{$ELSE}
function GetCommTimeouts; external kernel32 name ''GetCommTimeouts'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PurgeComm: Pointer;

function PurgeComm;
begin
GetProcedureAddress(_PurgeComm, kernel32, ''PurgeComm'');
asm
mov esp, ebp
pop ebp
jmp [_PurgeComm]
end;
end;
{$ELSE}
function PurgeComm; external kernel32 name ''PurgeComm'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetCommBreak: Pointer;

function SetCommBreak;
begin
GetProcedureAddress(_SetCommBreak, kernel32, ''SetCommBreak'');
asm
mov esp, ebp
pop ebp
jmp [_SetCommBreak]
end;
end;
{$ELSE}
function SetCommBreak; external kernel32 name ''SetCommBreak'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetCommConfig: Pointer;

function SetCommConfig;
begin
GetProcedureAddress(_SetCommConfig, kernel32, ''SetCommConfig'');
asm
mov esp, ebp
pop ebp
jmp [_SetCommConfig]
end;
end;
{$ELSE}
function SetCommConfig; external kernel32 name ''SetCommConfig'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}

var
_SetCommMask: Pointer;

function SetCommMask;
begin
GetProcedureAddress(_SetCommMask, kernel32, ''SetCommMask'');
asm
mov esp, ebp
pop ebp
jmp [_SetCommMask]
end;
end;
{$ELSE}
function SetCommMask; external kernel32 name ''SetCommMask'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetCommState: Pointer;

function SetCommState;
begin
GetProcedureAddress(_SetCommState, kernel32, ''SetCommState'');
asm
mov esp, ebp
pop ebp
jmp [_SetCommState]
end;
end;
{$ELSE}
function SetCommState; external kernel32 name ''SetCommState'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetCommTimeouts: Pointer;

function SetCommTimeouts;
begin
GetProcedureAddress(_SetCommTimeouts, kernel32, ''SetCommTimeouts'');
asm
mov esp, ebp
pop ebp
jmp [_SetCommTimeouts]
end;
end;
{$ELSE}
function SetCommTimeouts; external kernel32 name ''SetCommTimeouts'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TransmitCommChar: Pointer;

function TransmitCommChar;
begin
GetProcedureAddress(_TransmitCommChar, kernel32, ''TransmitCommChar'');
asm
mov esp, ebp
pop ebp
jmp [_TransmitCommChar]
end;
end;
{$ELSE}
function TransmitCommChar; external kernel32 name ''TransmitCommChar'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WaitCommEvent: Pointer;

function WaitCommEvent;
begin
GetProcedureAddress(_WaitCommEvent, kernel32, ''WaitCommEvent'');
asm
mov esp, ebp
pop ebp
jmp [_WaitCommEvent]
end;
end;
{$ELSE}
function WaitCommEvent; external kernel32 name ''WaitCommEvent'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetTapePosition: Pointer;

function SetTapePosition;
begin
GetProcedureAddress(_SetTapePosition, kernel32, ''SetTapePosition'');
asm
mov esp, ebp
pop ebp
jmp [_SetTapePosition]
end;
end;
{$ELSE}
function SetTapePosition; external kernel32 name ''SetTapePosition'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTapePosition: Pointer;

function GetTapePosition;
begin
GetProcedureAddress(_GetTapePosition, kernel32, ''GetTapePosition'');
asm
mov esp, ebp
pop ebp
jmp [_GetTapePosition]
end;
end;
{$ELSE}
function GetTapePosition; external kernel32 name ''GetTapePosition'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PrepareTape: Pointer;

function PrepareTape;
begin
GetProcedureAddress(_PrepareTape, kernel32, ''PrepareTape'');
asm
mov esp, ebp
pop ebp
jmp [_PrepareTape]
end;
end;
{$ELSE}
function PrepareTape; external kernel32 name ''PrepareTape'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EraseTape: Pointer;

function EraseTape;
begin
GetProcedureAddress(_EraseTape, kernel32, ''EraseTape'');


asm
mov esp, ebp
pop ebp
jmp [_EraseTape]
end;
end;
{$ELSE}
function EraseTape; external kernel32 name ''EraseTape'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateTapePartition: Pointer;

function CreateTapePartition;
begin
GetProcedureAddress(_CreateTapePartition, kernel32, ''CreateTapePartition'');
asm
mov esp, ebp
pop ebp
jmp [_CreateTapePartition]
end;
end;
{$ELSE}
function CreateTapePartition; external kernel32 name ''CreateTapePartition'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WriteTapemark: Pointer;

function WriteTapemark;
begin
GetProcedureAddress(_WriteTapemark, kernel32, ''WriteTapemark'');
asm
mov esp, ebp
pop ebp
jmp [_WriteTapemark]
end;
end;
{$ELSE}
function WriteTapemark; external kernel32 name ''WriteTapemark'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTapeStatus: Pointer;

function GetTapeStatus;
begin
GetProcedureAddress(_GetTapeStatus, kernel32, ''GetTapeStatus'');
asm
mov esp, ebp
pop ebp
jmp [_GetTapeStatus]
end;
end;
{$ELSE}
function GetTapeStatus; external kernel32 name ''GetTapeStatus'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTapeParameters: Pointer;

function GetTapeParameters;
begin
GetProcedureAddress(_GetTapeParameters, kernel32, ''GetTapeParameters'');
asm
mov esp, ebp
pop ebp
jmp [_GetTapeParameters]
end;
end;
{$ELSE}
function GetTapeParameters; external kernel32 name ''GetTapeParameters'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetTapeParameters: Pointer;

function SetTapeParameters;
begin
GetProcedureAddress(_SetTapeParameters, kernel32, ''SetTapeParameters'');
asm
mov esp, ebp
pop ebp
jmp [_SetTapeParameters]

end;
end;
{$ELSE}
function SetTapeParameters; external kernel32 name ''SetTapeParameters'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Beep: Pointer;

function Beep;
begin
GetProcedureAddress(_Beep, kernel32, ''Beep'');
asm
mov esp, ebp
pop ebp
jmp [_Beep]
end;
end;
{$ELSE}
function Beep; external kernel32 name ''Beep'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MulDiv: Pointer;

function MulDiv;
begin
GetProcedureAddress(_MulDiv, kernel32, ''MulDiv'');
asm
mov esp, ebp
pop ebp
jmp [_MulDiv]
end;
end;
{$ELSE}
function MulDiv; external kernel32 name ''MulDiv'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemTime: Pointer;

procedure GetSystemTime;
begin
GetProcedureAddress(_GetSystemTime, kernel32, ''GetSystemTime'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemTime]
end;
end;
{$ELSE}
procedure GetSystemTime; external kernel32 name ''GetSystemTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemTimeAsFileTime: Pointer;

procedure GetSystemTimeAsFileTime;
begin
GetProcedureAddress(_GetSystemTimeAsFileTime, kernel32, ''GetSystemTimeAsFileTime'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemTimeAsFileTime]
end;
end;
{$ELSE}
procedure GetSystemTimeAsFileTime; external kernel32 name ''GetSystemTimeAsFileTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSystemTime: Pointer;

function SetSystemTime;
begin
GetProcedureAddress(_SetSystemTime, kernel32, ''SetSystemTime'');
asm
mov esp, ebp
pop ebp
jmp [_SetSystemTime]
end;
end;
{$ELSE}
function SetSystemTime; external kernel32 name ''SetSystemTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLocalTime: Pointer;

procedure GetLocalTime;
begin
GetProcedureAddress(_GetLocalTime, kernel32, ''GetLocalTime'');
asm
mov esp, ebp
pop ebp
jmp [_GetLocalTime]
end;
end;
{$ELSE}
procedure GetLocalTime; external kernel32 name ''GetLocalTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetLocalTime: Pointer;

function SetLocalTime;
begin
GetProcedureAddress(_SetLocalTime, kernel32, ''SetLocalTime'');
asm
mov esp, ebp
pop ebp
jmp [_SetLocalTime]
end;
end;
{$ELSE}
function SetLocalTime; external kernel32 name ''SetLocalTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemInfo: Pointer;

procedure GetSystemInfo;
begin
GetProcedureAddress(_GetSystemInfo, kernel32, ''GetSystemInfo'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemInfo]
end;
end;
{$ELSE}
procedure GetSystemInfo; external kernel32 name ''GetSystemInfo'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetNativeSystemInfo: Pointer;

procedure GetNativeSystemInfo;
begin
GetProcedureAddress(_GetNativeSystemInfo, kernel32, ''GetNativeSystemInfo'');
asm
mov esp, ebp
pop ebp
jmp [_GetNativeSystemInfo]
end;
end;
{$ELSE}
procedure GetNativeSystemInfo; external kernel32 name ''GetNativeSystemInfo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsProcessorFeaturePresent: Pointer;

function IsProcessorFeaturePresent;
begin
GetProcedureAddress(_IsProcessorFeaturePresent, kernel32, ''IsProcessorFeaturePresent'');
asm
mov esp, ebp
pop ebp
jmp [_IsProcessorFeaturePresent]
end;
end;
{$ELSE}
function IsProcessorFeaturePresent; external kernel32 name ''IsProcessorFeaturePresent'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SystemTimeToTzSpecificLocalTime: Pointer;

function SystemTimeToTzSpecificLocalTime;
begin
GetProcedureAddress(_SystemTimeToTzSpecificLocalTime, kernel32, ''SystemTimeToTzSpecificLocalTime'');
asm
mov esp, ebp
pop ebp
jmp [_SystemTimeToTzSpecificLocalTime]
end;
end;
{$ELSE}
function SystemTimeToTzSpecificLocalTime; external kernel32 name ''SystemTimeToTzSpecificLocalTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TzSpecificLocalTimeToSystemTime: Pointer;

function TzSpecificLocalTimeToSystemTime;
begin
GetProcedureAddress(_TzSpecificLocalTimeToSystemTime, kernel32, ''TzSpecificLocalTimeToSystemTime'');
asm
mov esp, ebp
pop ebp
jmp [_TzSpecificLocalTimeToSystemTime]
end;
end;
{$ELSE}
function TzSpecificLocalTimeToSystemTime; external kernel32 name ''TzSpecificLocalTimeToSystemTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTimeZoneInformation: Pointer;

function GetTimeZoneInformation;
begin
GetProcedureAddress(_GetTimeZoneInformation, kernel32, ''GetTimeZoneInformation'');

asm
mov esp, ebp
pop ebp
jmp [_GetTimeZoneInformation]
end;
end;
{$ELSE}
function GetTimeZoneInformation; external kernel32 name ''GetTimeZoneInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetTimeZoneInformation: Pointer;

function SetTimeZoneInformation;
begin
GetProcedureAddress(_SetTimeZoneInformation, kernel32, ''SetTimeZoneInformation'');
asm
mov esp, ebp
pop ebp
jmp [_SetTimeZoneInformation]
end;
end;
{$ELSE}
function SetTimeZoneInformation; external kernel32 name ''SetTimeZoneInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SystemTimeToFileTime: Pointer;

function SystemTimeToFileTime;
begin
GetProcedureAddress(_SystemTimeToFileTime, kernel32, ''SystemTimeToFileTime'');
asm
mov esp, ebp
pop ebp
jmp [_SystemTimeToFileTime]
end;
end;
{$ELSE}
function SystemTimeToFileTime; external kernel32 name ''SystemTimeToFileTime'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FileTimeToLocalFileTime: Pointer;

function FileTimeToLocalFileTime;
begin
GetProcedureAddress(_FileTimeToLocalFileTime, kernel32, ''FileTimeToLocalFileTime'');
asm
mov esp, ebp
pop ebp
jmp [_FileTimeToLocalFileTime]
end;
end;
{$ELSE}
function FileTimeToLocalFileTime; external kernel32 name ''FileTimeToLocalFileTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LocalFileTimeToFileTime: Pointer;

function LocalFileTimeToFileTime;
begin
GetProcedureAddress(_LocalFileTimeToFileTime, kernel32, ''LocalFileTimeToFileTime'');
asm
mov esp, ebp
pop ebp
jmp [_LocalFileTimeToFileTime]
end;
end;
{$ELSE}
function LocalFileTimeToFileTime; external kernel32 name ''LocalFileTimeToFileTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FileTimeToSystemTime: Pointer;

function FileTimeToSystemTime;

begin
GetProcedureAddress(_FileTimeToSystemTime, kernel32, ''FileTimeToSystemTime'');
asm
mov esp, ebp
pop ebp
jmp [_FileTimeToSystemTime]
end;
end;
{$ELSE}
function FileTimeToSystemTime; external kernel32 name ''FileTimeToSystemTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CompareFileTime: Pointer;

function CompareFileTime;
begin
GetProcedureAddress(_CompareFileTime, kernel32, ''CompareFileTime'');
asm
mov esp, ebp
pop ebp
jmp [_CompareFileTime]
end;
end;
{$ELSE}
function CompareFileTime; external kernel32 name ''CompareFileTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FileTimeToDosDateTime: Pointer;

function FileTimeToDosDateTime;
begin
GetProcedureAddress(_FileTimeToDosDateTime, kernel32, ''FileTimeToDosDateTime'');
asm
mov esp, ebp
pop ebp
jmp [_FileTimeToDosDateTime]
end;
end;
{$ELSE}
function FileTimeToDosDateTime; external kernel32 name ''FileTimeToDosDateTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DosDateTimeToFileTime: Pointer;

function DosDateTimeToFileTime;
begin
GetProcedureAddress(_DosDateTimeToFileTime, kernel32, ''DosDateTimeToFileTime'');
asm
mov esp, ebp
pop ebp
jmp [_DosDateTimeToFileTime]
end;
end;
{$ELSE}
function DosDateTimeToFileTime; external kernel32 name ''DosDateTimeToFileTime'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTickCount: Pointer;

function GetTickCount;
begin
GetProcedureAddress(_GetTickCount, kernel32, ''GetTickCount'');
asm
mov esp, ebp
pop ebp
jmp [_GetTickCount]
end;
end;
{$ELSE}
function GetTickCount; external kernel32 name ''GetTickCount'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSystemTimeAdjustment: Pointer;

function SetSystemTimeAdjustment;
begin
GetProcedureAddress(_SetSystemTimeAdjustment, kernel32, ''SetSystemTimeAdjustment'');
asm
mov esp, ebp
pop ebp
jmp [_SetSystemTimeAdjustment]
end;
end;
{$ELSE}
function SetSystemTimeAdjustment; external kernel32 name ''SetSystemTimeAdjustment'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemTimeAdjustment: Pointer;

function GetSystemTimeAdjustment;
begin
GetProcedureAddress(_GetSystemTimeAdjustment, kernel32, ''GetSystemTimeAdjustment'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemTimeAdjustment]
end;
end;
{$ELSE}
function GetSystemTimeAdjustment; external kernel32 name ''GetSystemTimeAdjustment'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FormatMessageA: Pointer;

function FormatMessageA;
begin
GetProcedureAddress(_FormatMessageA, kernel32, ''FormatMessageA'');
asm
mov esp, ebp
pop ebp
jmp [_FormatMessageA]
end;
end;
{$ELSE}
function FormatMessageA; external kernel32 name ''FormatMessageA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FormatMessageW: Pointer;

function FormatMessageW;
begin
GetProcedureAddress(_FormatMessageW, kernel32, ''FormatMessageW'');
asm
mov esp, ebp
pop ebp
jmp [_FormatMessageW]
end;
end;
{$ELSE}
function FormatMessageW; external kernel32 name ''FormatMessageW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FormatMessage: Pointer;

function FormatMessage;
begin
GetProcedureAddress(_FormatMessage, kernel32, ''FormatMessageW'');
asm
mov esp, ebp
pop ebp
jmp [_FormatMessage]
end;
end;
{$ELSE}
function FormatMessage; external kernel32 name ''FormatMessageW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FormatMessage: Pointer;

function FormatMessage;


begin
GetProcedureAddress(_FormatMessage, kernel32, ''FormatMessageA'');
asm
mov esp, ebp
pop ebp
jmp [_FormatMessage]
end;
end;
{$ELSE}
function FormatMessage; external kernel32 name ''FormatMessageA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreatePipe: Pointer;

function CreatePipe;
begin
GetProcedureAddress(_CreatePipe, kernel32, ''CreatePipe'');
asm
mov esp, ebp
pop ebp
jmp [_CreatePipe]
end;
end;
{$ELSE}
function CreatePipe; external kernel32 name ''CreatePipe'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ConnectNamedPipe: Pointer;

function ConnectNamedPipe;
begin
GetProcedureAddress(_ConnectNamedPipe, kernel32, ''ConnectNamedPipe'');
asm
mov esp, ebp
pop ebp
jmp [_ConnectNamedPipe]
end;
end;
{$ELSE}
function ConnectNamedPipe; external kernel32 name ''ConnectNamedPipe'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DisconnectNamedPipe: Pointer;

function DisconnectNamedPipe;
begin
GetProcedureAddress(_DisconnectNamedPipe, kernel32, ''DisconnectNamedPipe'');
asm
mov esp, ebp
pop ebp
jmp [_DisconnectNamedPipe]
end;
end;
{$ELSE}
function DisconnectNamedPipe; external kernel32 name ''DisconnectNamedPipe'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetNamedPipeHandleState: Pointer;

function SetNamedPipeHandleState;
begin
GetProcedureAddress(_SetNamedPipeHandleState, kernel32, ''SetNamedPipeHandleState'');
asm
mov esp, ebp
pop ebp
jmp [_SetNamedPipeHandleState]
end;
end;
{$ELSE}
function SetNamedPipeHandleState; external kernel32 name ''SetNamedPipeHandleState'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetNamedPipeInfo: Pointer;

function GetNamedPipeInfo;
begin
GetProcedureAddress(_GetNamedPipeInfo, kernel32, ''GetNamedPipeInfo'');


asm
mov esp, ebp
pop ebp
jmp [_GetNamedPipeInfo]
end;
end;
{$ELSE}
function GetNamedPipeInfo; external kernel32 name ''GetNamedPipeInfo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PeekNamedPipe: Pointer;

function PeekNamedPipe;
begin
GetProcedureAddress(_PeekNamedPipe, kernel32, ''PeekNamedPipe'');
asm
mov esp, ebp
pop ebp
jmp [_PeekNamedPipe]
end;
end;
{$ELSE}
function PeekNamedPipe; external kernel32 name ''PeekNamedPipe'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TransactNamedPipe: Pointer;

function TransactNamedPipe;
begin
GetProcedureAddress(_TransactNamedPipe, kernel32, ''TransactNamedPipe'');
asm
mov esp, ebp
pop ebp
jmp [_TransactNamedPipe]
end;
end;
{$ELSE}
function TransactNamedPipe; external kernel32 name ''TransactNamedPipe'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateMailslotA: Pointer;

function CreateMailslotA;
begin
GetProcedureAddress(_CreateMailslotA, kernel32, ''CreateMailslotA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateMailslotA]
end;
end;
{$ELSE}
function CreateMailslotA; external kernel32 name ''CreateMailslotA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateMailslotW: Pointer;

function CreateMailslotW;
begin
GetProcedureAddress(_CreateMailslotW, kernel32, ''CreateMailslotW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateMailslotW]
end;
end;
{$ELSE}
function CreateMailslotW; external kernel32 name ''CreateMailslotW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateMailslot: Pointer;

function CreateMailslot;
begin
GetProcedureAddress(_CreateMailslot, kernel32, ''CreateMailslotW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateMailslot]
end;
end;
{$ELSE}
function CreateMailslot; external kernel32 name ''CreateMailslotW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateMailslot: Pointer;

function CreateMailslot;
begin
GetProcedureAddress(_CreateMailslot, kernel32, ''CreateMailslotA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateMailslot]
end;
end;
{$ELSE}
function CreateMailslot; external kernel32 name ''CreateMailslotA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetMailslotInfo: Pointer;

function GetMailslotInfo;
begin
GetProcedureAddress(_GetMailslotInfo, kernel32, ''GetMailslotInfo'');
asm
mov esp, ebp
pop ebp
jmp [_GetMailslotInfo]
end;
end;
{$ELSE}
function GetMailslotInfo; external kernel32 name ''GetMailslotInfo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetMailslotInfo: Pointer;

function SetMailslotInfo;


begin
GetProcedureAddress(_SetMailslotInfo, kernel32, ''SetMailslotInfo'');
asm
mov esp, ebp
pop ebp
jmp [_SetMailslotInfo]
end;
end;
{$ELSE}
function SetMailslotInfo; external kernel32 name ''SetMailslotInfo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MapViewOfFile: Pointer;

function MapViewOfFile;
begin
GetProcedureAddress(_MapViewOfFile, kernel32, ''MapViewOfFile'');
asm
mov esp, ebp
pop ebp
jmp [_MapViewOfFile]
end;
end;
{$ELSE}
function MapViewOfFile; external kernel32 name ''MapViewOfFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FlushViewOfFile: Pointer;

function FlushViewOfFile;
begin
GetProcedureAddress(_FlushViewOfFile, kernel32, ''FlushViewOfFile'');
asm
mov esp, ebp
pop ebp
jmp [_FlushViewOfFile]
end;
end;
{$ELSE}
function FlushViewOfFile; external kernel32 name ''FlushViewOfFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UnmapViewOfFile: Pointer;

function UnmapViewOfFile;
begin
GetProcedureAddress(_UnmapViewOfFile, kernel32, ''UnmapViewOfFile'');
asm
mov esp, ebp
pop ebp
jmp [_UnmapViewOfFile]
end;
end;
{$ELSE}
function UnmapViewOfFile; external kernel32 name ''UnmapViewOfFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EncryptFileA: Pointer;

function EncryptFileA;
begin
GetProcedureAddress(_EncryptFileA, advapi32, ''EncryptFileA'');
asm
mov esp, ebp
pop ebp
jmp [_EncryptFileA]
end;
end;
{$ELSE}
function EncryptFileA; external advapi32 name ''EncryptFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EncryptFileW: Pointer;

function EncryptFileW;
begin
GetProcedureAddress(_EncryptFileW, advapi32, ''EncryptFileW'');
asm
mov esp, ebp
pop ebp
jmp [_EncryptFileW]
end;
end;
{$ELSE}
function EncryptFileW; external advapi32 name ''EncryptFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EncryptFile: Pointer;

function EncryptFile;
begin
GetProcedureAddress(_EncryptFile, advapi32, ''EncryptFileW'');
asm
mov esp, ebp
pop ebp
jmp [_EncryptFile]
end;
end;
{$ELSE}
function EncryptFile; external advapi32 name ''EncryptFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EncryptFile: Pointer;

function EncryptFile;
begin
GetProcedureAddress(_EncryptFile, advapi32, ''EncryptFileA'');
asm
mov esp, ebp
pop ebp
jmp [_EncryptFile]
end;
end;
{$ELSE}
function EncryptFile; external advapi32 name ''EncryptFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_DecryptFileA: Pointer;

function DecryptFileA;
begin
GetProcedureAddress(_DecryptFileA, advapi32, ''DecryptFileA'');

asm
mov esp, ebp
pop ebp
jmp [_DecryptFileA]
end;
end;
{$ELSE}
function DecryptFileA; external advapi32 name ''DecryptFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DecryptFileW: Pointer;

function DecryptFileW;
begin
GetProcedureAddress(_DecryptFileW, advapi32, ''DecryptFileW'');
asm
mov esp, ebp
pop ebp
jmp [_DecryptFileW]
end;
end;
{$ELSE}
function DecryptFileW; external advapi32 name ''DecryptFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_DecryptFile: Pointer;

function DecryptFile;
begin
GetProcedureAddress(_DecryptFile, advapi32, ''DecryptFileW'');
asm
mov esp, ebp
pop ebp
jmp [_DecryptFile]
end;
end;
{$ELSE}
function DecryptFile; external advapi32 name ''DecryptFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_DecryptFile: Pointer;


function DecryptFile;
begin
GetProcedureAddress(_DecryptFile, advapi32, ''DecryptFileA'');
asm
mov esp, ebp
pop ebp
jmp [_DecryptFile]
end;
end;
{$ELSE}
function DecryptFile; external advapi32 name ''DecryptFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FileEncryptionStatusA: Pointer;

function FileEncryptionStatusA;
begin
GetProcedureAddress(_FileEncryptionStatusA, advapi32, ''FileEncryptionStatusA'');
asm
mov esp, ebp
pop ebp
jmp [_FileEncryptionStatusA]
end;
end;
{$ELSE}
function FileEncryptionStatusA; external advapi32 name ''FileEncryptionStatusA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FileEncryptionStatusW: Pointer;

function FileEncryptionStatusW;
begin
GetProcedureAddress(_FileEncryptionStatusW, advapi32, ''FileEncryptionStatusW'');
asm
mov esp, ebp
pop ebp
jmp [_FileEncryptionStatusW]
end;
end;
{$ELSE}
function FileEncryptionStatusW; external advapi32 name ''FileEncryptionStatusW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FileEncryptionStatus: Pointer;

function FileEncryptionStatus;
begin
GetProcedureAddress(_FileEncryptionStatus, advapi32, ''FileEncryptionStatusW'');
asm
mov esp, ebp
pop ebp
jmp [_FileEncryptionStatus]
end;
end;
{$ELSE}
function FileEncryptionStatus; external advapi32 name ''FileEncryptionStatusW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FileEncryptionStatus: Pointer;

function FileEncryptionStatus;
begin
GetProcedureAddress(_FileEncryptionStatus, advapi32, ''FileEncryptionStatusA'');
asm
mov esp, ebp
pop ebp
jmp [_FileEncryptionStatus]
end;
end;
{$ELSE}
function FileEncryptionStatus; external advapi32 name ''FileEncryptionStatusA'';
{$ENDIF DYNAMIC_LINK}


{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_OpenEncryptedFileRawA: Pointer;

function OpenEncryptedFileRawA;
begin
GetProcedureAddress(_OpenEncryptedFileRawA, advapi32, ''OpenEncryptedFileRawA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEncryptedFileRawA]
end;
end;
{$ELSE}
function OpenEncryptedFileRawA; external advapi32 name ''OpenEncryptedFileRawA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenEncryptedFileRawW: Pointer;

function OpenEncryptedFileRawW;
begin
GetProcedureAddress(_OpenEncryptedFileRawW, advapi32, ''OpenEncryptedFileRawW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEncryptedFileRawW]
end;
end;
{$ELSE}
function OpenEncryptedFileRawW; external advapi32 name ''OpenEncryptedFileRawW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OpenEncryptedFileRaw: Pointer;

function OpenEncryptedFileRaw;
begin
GetProcedureAddress(_OpenEncryptedFileRaw, advapi32, ''OpenEncryptedFileRawW'');


asm
mov esp, ebp
pop ebp
jmp [_OpenEncryptedFileRaw]
end;
end;
{$ELSE}
function OpenEncryptedFileRaw; external advapi32 name ''OpenEncryptedFileRawW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OpenEncryptedFileRaw: Pointer;

function OpenEncryptedFileRaw;
begin
GetProcedureAddress(_OpenEncryptedFileRaw, advapi32, ''OpenEncryptedFileRawA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEncryptedFileRaw]
end;
end;
{$ELSE}
function OpenEncryptedFileRaw; external advapi32 name ''OpenEncryptedFileRawA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ReadEncryptedFileRaw: Pointer;

function ReadEncryptedFileRaw;
begin
GetProcedureAddress(_ReadEncryptedFileRaw, advapi32, ''ReadEncryptedFileRaw'');
asm
mov esp, ebp
pop ebp
jmp [_ReadEncryptedFileRaw]
end;
end;
{$ELSE}
function ReadEncryptedFileRaw; external advapi32 name ''ReadEncryptedFileRaw'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WriteEncryptedFileRaw: Pointer;

function WriteEncryptedFileRaw;
begin
GetProcedureAddress(_WriteEncryptedFileRaw, advapi32, ''WriteEncryptedFileRaw'');
asm
mov esp, ebp
pop ebp
jmp [_WriteEncryptedFileRaw]
end;
end;
{$ELSE}
function WriteEncryptedFileRaw; external advapi32 name ''WriteEncryptedFileRaw'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CloseEncryptedFileRaw: Pointer;

procedure CloseEncryptedFileRaw;
begin
GetProcedureAddress(_CloseEncryptedFileRaw, advapi32, ''CloseEncryptedFileRaw'');
asm
mov esp, ebp
pop ebp
jmp [_CloseEncryptedFileRaw]
end;
end;
{$ELSE}
procedure CloseEncryptedFileRaw; external advapi32 name ''CloseEncryptedFileRaw'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_lstrcmpA: Pointer;

function lstrcmpA;
begin
GetProcedureAddress(_lstrcmpA, kernel32, ''lstrcmpA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcmpA]
end;
end;
{$ELSE}
function lstrcmpA; external kernel32 name ''lstrcmpA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_lstrcmpW: Pointer;

function lstrcmpW;
begin
GetProcedureAddress(_lstrcmpW, kernel32, ''lstrcmpW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcmpW]
end;
end;
{$ELSE}
function lstrcmpW; external kernel32 name ''lstrcmpW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcmp: Pointer;

function lstrcmp;
begin
GetProcedureAddress(_lstrcmp, kernel32, ''lstrcmpW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcmp]
end;
end;
{$ELSE}
function lstrcmp; external kernel32 name ''lstrcmpW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcmp: Pointer;

function lstrcmp;
begin
GetProcedureAddress(_lstrcmp, kernel32, ''lstrcmpA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcmp]
end;
end;
{$ELSE}
function lstrcmp; external kernel32 name ''lstrcmpA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_lstrcmpiA: Pointer;

function lstrcmpiA;
begin
GetProcedureAddress(_lstrcmpiA, kernel32, ''lstrcmpiA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcmpiA]
end;
end;
{$ELSE}
function lstrcmpiA; external kernel32 name ''lstrcmpiA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_lstrcmpiW: Pointer;

function lstrcmpiW;
begin
GetProcedureAddress(_lstrcmpiW, kernel32, ''lstrcmpiW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcmpiW]
end;
end;
{$ELSE}
function lstrcmpiW; external kernel32 name ''lstrcmpiW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcmpi: Pointer;

function lstrcmpi;
begin
GetProcedureAddress(_lstrcmpi, kernel32, ''lstrcmpiW'');

asm
mov esp, ebp
pop ebp
jmp [_lstrcmpi]
end;
end;
{$ELSE}
function lstrcmpi; external kernel32 name ''lstrcmpiW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcmpi: Pointer;

function lstrcmpi;
begin
GetProcedureAddress(_lstrcmpi, kernel32, ''lstrcmpiA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcmpi]
end;
end;
{$ELSE}
function lstrcmpi; external kernel32 name ''lstrcmpiA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_lstrcpynA: Pointer;

function lstrcpynA;
begin
GetProcedureAddress(_lstrcpynA, kernel32, ''lstrcpynA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcpynA]
end;
end;
{$ELSE}
function lstrcpynA; external kernel32 name ''lstrcpynA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_lstrcpynW: Pointer;

function lstrcpynW;
begin
GetProcedureAddress(_lstrcpynW, kernel32, ''lstrcpynW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcpynW]
end;
end;
{$ELSE}
function lstrcpynW; external kernel32 name ''lstrcpynW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcpyn: Pointer;

function lstrcpyn;
begin
GetProcedureAddress(_lstrcpyn, kernel32, ''lstrcpynW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcpyn]
end;
end;
{$ELSE}
function lstrcpyn; external kernel32 name ''lstrcpynW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcpyn: Pointer;

function lstrcpyn;
begin
GetProcedureAddress(_lstrcpyn, kernel32, ''lstrcpynA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcpyn]
end;
end;
{$ELSE}
function lstrcpyn; external kernel32 name ''lstrcpynA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_lstrcpyA: Pointer;

function lstrcpyA;
begin
GetProcedureAddress(_lstrcpyA, kernel32, ''lstrcpyA'');

asm
mov esp, ebp
pop ebp
jmp [_lstrcpyA]
end;
end;
{$ELSE}
function lstrcpyA; external kernel32 name ''lstrcpyA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_lstrcpyW: Pointer;

function lstrcpyW;
begin
GetProcedureAddress(_lstrcpyW, kernel32, ''lstrcpyW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcpyW]
end;
end;
{$ELSE}
function lstrcpyW; external kernel32 name ''lstrcpyW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcpy: Pointer;

function lstrcpy;
begin
GetProcedureAddress(_lstrcpy, kernel32, ''lstrcpyW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcpy]
end;
end;
{$ELSE}
function lstrcpy; external kernel32 name ''lstrcpyW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcpy: Pointer;

function lstrcpy;
begin
GetProcedureAddress(_lstrcpy, kernel32, ''lstrcpyA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcpy]
end;
end;
{$ELSE}
function lstrcpy; external kernel32 name ''lstrcpyA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_lstrcatA: Pointer;

function lstrcatA;
begin
GetProcedureAddress(_lstrcatA, kernel32, ''lstrcatA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcatA]
end;
end;
{$ELSE}
function lstrcatA; external kernel32 name ''lstrcatA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_lstrcatW: Pointer;

function lstrcatW;
begin
GetProcedureAddress(_lstrcatW, kernel32, ''lstrcatW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcatW]
end;
end;
{$ELSE}
function lstrcatW; external kernel32 name ''lstrcatW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcat: Pointer;

function lstrcat;
begin
GetProcedureAddress(_lstrcat, kernel32, ''lstrcatW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcat]
end;
end;
{$ELSE}
function lstrcat; external kernel32 name ''lstrcatW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_lstrcat: Pointer;

function lstrcat;
begin
GetProcedureAddress(_lstrcat, kernel32, ''lstrcatA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrcat]
end;
end;
{$ELSE}
function lstrcat; external kernel32 name ''lstrcatA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_lstrlenA: Pointer;

function lstrlenA;
begin
GetProcedureAddress(_lstrlenA, kernel32, ''lstrlenA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrlenA]
end;
end;
{$ELSE}
function lstrlenA; external kernel32 name ''lstrlenA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_lstrlenW: Pointer;

function lstrlenW;
begin
GetProcedureAddress(_lstrlenW, kernel32, ''lstrlenW'');

asm
mov esp, ebp
pop ebp
jmp [_lstrlenW]
end;
end;
{$ELSE}
function lstrlenW; external kernel32 name ''lstrlenW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_lstrlen: Pointer;

function lstrlen;
begin
GetProcedureAddress(_lstrlen, kernel32, ''lstrlenW'');
asm
mov esp, ebp
pop ebp
jmp [_lstrlen]
end;
end;
{$ELSE}
function lstrlen; external kernel32 name ''lstrlenW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_lstrlen: Pointer;

function lstrlen;
begin
GetProcedureAddress(_lstrlen, kernel32, ''lstrlenA'');
asm
mov esp, ebp
pop ebp
jmp [_lstrlen]
end;
end;
{$ELSE}
function lstrlen; external kernel32 name ''lstrlenA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_OpenFile: Pointer;

function OpenFile;
begin
GetProcedureAddress(_OpenFile, kernel32, ''OpenFile'');
asm
mov esp, ebp
pop ebp
jmp [_OpenFile]
end;
end;
{$ELSE}
function OpenFile; external kernel32 name ''OpenFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
__lopen: Pointer;

function _lopen;
begin
GetProcedureAddress(__lopen, kernel32, ''_lopen'');
asm
mov esp, ebp
pop ebp
jmp [__lopen]
end;
end;
{$ELSE}
function _lopen; external kernel32 name ''_lopen'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
__lcreat: Pointer;

function _lcreat;
begin
GetProcedureAddress(__lcreat, kernel32, ''_lcreat'');
asm
mov esp, ebp
pop ebp
jmp [__lcreat]
end;
end;
{$ELSE}
function _lcreat; external kernel32 name ''_lcreat'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
__lread: Pointer;

function _lread;
begin
GetProcedureAddress(__lread, kernel32, ''_lread'');
asm
mov esp, ebp
pop ebp
jmp [__lread]
end;
end;
{$ELSE}
function _lread; external kernel32 name ''_lread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
__lwrite: Pointer;

function _lwrite;
begin
GetProcedureAddress(__lwrite, kernel32, ''_lwrite'');
asm
mov esp, ebp
pop ebp
jmp [__lwrite]
end;
end;
{$ELSE}
function _lwrite; external kernel32 name ''_lwrite'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
__hread: Pointer;

function _hread;
begin
GetProcedureAddress(__hread, kernel32, ''_hread'');
asm
mov esp, ebp
pop ebp
jmp [__hread]
end;
end;
{$ELSE}
function _hread; external kernel32 name ''_hread'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
__hwrite: Pointer;

function _hwrite;
begin
GetProcedureAddress(__hwrite, kernel32, ''_hwrite'');
asm
mov esp, ebp
pop ebp
jmp [__hwrite]


end;
end;
{$ELSE}
function _hwrite; external kernel32 name ''_hwrite'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
__lclose: Pointer;

function _lclose;
begin
GetProcedureAddress(__lclose, kernel32, ''_lclose'');
asm
mov esp, ebp
pop ebp
jmp [__lclose]
end;
end;
{$ELSE}
function _lclose; external kernel32 name ''_lclose'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
__llseek: Pointer;

function _llseek;
begin
GetProcedureAddress(__llseek, kernel32, ''_llseek'');
asm
mov esp, ebp
pop ebp
jmp [__llseek]
end;
end;
{$ELSE}
function _llseek; external kernel32 name ''_llseek'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsTextUnicode: Pointer;

function IsTextUnicode;
begin
GetProcedureAddress(_IsTextUnicode, advapi32, ''IsTextUnicode'');
asm
mov esp, ebp
pop ebp
jmp [_IsTextUnicode]
end;
end;
{$ELSE}
function IsTextUnicode; external advapi32 name ''IsTextUnicode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FlsAlloc: Pointer;

function FlsAlloc;
begin
GetProcedureAddress(_FlsAlloc, kernel32, ''FlsAlloc'');
asm
mov esp, ebp
pop ebp
jmp [_FlsAlloc]
end;
end;
{$ELSE}
function FlsAlloc; external kernel32 name ''FlsAlloc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FlsGetValue: Pointer;

function FlsGetValue;
begin
GetProcedureAddress(_FlsGetValue, kernel32, ''FlsGetValue'');
asm
mov esp, ebp
pop ebp
jmp [_FlsGetValue]
end;
end;
{$ELSE}
function FlsGetValue; external kernel32 name ''FlsGetValue'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FlsSetValue: Pointer;

function FlsSetValue;
begin
GetProcedureAddress(_FlsSetValue, kernel32, ''FlsSetValue'');
asm
mov esp, ebp

pop ebp
jmp [_FlsSetValue]
end;
end;
{$ELSE}
function FlsSetValue; external kernel32 name ''FlsSetValue'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FlsFree: Pointer;

function FlsFree;
begin
GetProcedureAddress(_FlsFree, kernel32, ''FlsFree'');
asm
mov esp, ebp
pop ebp
jmp [_FlsFree]
end;
end;
{$ELSE}
function FlsFree; external kernel32 name ''FlsFree'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TlsAlloc: Pointer;

function TlsAlloc;
begin
GetProcedureAddress(_TlsAlloc, kernel32, ''TlsAlloc'');
asm
mov esp, ebp
pop ebp
jmp [_TlsAlloc]
end;
end;
{$ELSE}
function TlsAlloc; external kernel32 name ''TlsAlloc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TlsGetValue: Pointer;

function TlsGetValue;
begin
GetProcedureAddress(_TlsGetValue, kernel32, ''TlsGetValue'');
asm


mov esp, ebp
pop ebp
jmp [_TlsGetValue]
end;
end;
{$ELSE}
function TlsGetValue; external kernel32 name ''TlsGetValue'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TlsSetValue: Pointer;

function TlsSetValue;
begin
GetProcedureAddress(_TlsSetValue, kernel32, ''TlsSetValue'');
asm
mov esp, ebp
pop ebp
jmp [_TlsSetValue]
end;
end;
{$ELSE}
function TlsSetValue; external kernel32 name ''TlsSetValue'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TlsFree: Pointer;

function TlsFree;
begin
GetProcedureAddress(_TlsFree, kernel32, ''TlsFree'');
asm
mov esp, ebp
pop ebp
jmp [_TlsFree]
end;
end;
{$ELSE}
function TlsFree; external kernel32 name ''TlsFree'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SleepEx: Pointer;

function SleepEx;
begin
GetProcedureAddress(_SleepEx, kernel32, ''SleepEx'');
asm
mov esp, ebp
pop ebp
jmp [_SleepEx]
end;
end;
{$ELSE}
function SleepEx; external kernel32 name ''SleepEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WaitForSingleObjectEx: Pointer;

function WaitForSingleObjectEx;
begin
GetProcedureAddress(_WaitForSingleObjectEx, kernel32, ''WaitForSingleObjectEx'');
asm
mov esp, ebp
pop ebp
jmp [_WaitForSingleObjectEx]
end;
end;
{$ELSE}
function WaitForSingleObjectEx; external kernel32 name ''WaitForSingleObjectEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WaitForMultipleObjectsEx: Pointer;

function WaitForMultipleObjectsEx;
begin
GetProcedureAddress(_WaitForMultipleObjectsEx, kernel32, ''WaitForMultipleObjectsEx'');
asm
mov esp, ebp
pop ebp
jmp [_WaitForMultipleObjectsEx]
end;
end;
{$ELSE}
function WaitForMultipleObjectsEx; external kernel32 name ''WaitForMultipleObjectsEx'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SignalObjectAndWait: Pointer;

function SignalObjectAndWait;
begin
GetProcedureAddress(_SignalObjectAndWait, kernel32, ''SignalObjectAndWait'');
asm
mov esp, ebp
pop ebp
jmp [_SignalObjectAndWait]
end;
end;
{$ELSE}
function SignalObjectAndWait; external kernel32 name ''SignalObjectAndWait'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReadFileEx: Pointer;

function ReadFileEx;
begin
GetProcedureAddress(_ReadFileEx, kernel32, ''ReadFileEx'');
asm
mov esp, ebp
pop ebp
jmp [_ReadFileEx]
end;
end;
{$ELSE}
function ReadFileEx; external kernel32 name ''ReadFileEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WriteFileEx: Pointer;

function WriteFileEx;
begin
GetProcedureAddress(_WriteFileEx, kernel32, ''WriteFileEx'');
asm
mov esp, ebp
pop ebp
jmp [_WriteFileEx]


end;
end;
{$ELSE}
function WriteFileEx; external kernel32 name ''WriteFileEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BackupRead: Pointer;

function BackupRead;
begin
GetProcedureAddress(_BackupRead, kernel32, ''BackupRead'');
asm
mov esp, ebp
pop ebp
jmp [_BackupRead]
end;
end;
{$ELSE}
function BackupRead; external kernel32 name ''BackupRead'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BackupSeek: Pointer;

function BackupSeek;
begin
GetProcedureAddress(_BackupSeek, kernel32, ''BackupSeek'');
asm
mov esp, ebp
pop ebp
jmp [_BackupSeek]
end;
end;
{$ELSE}
function BackupSeek; external kernel32 name ''BackupSeek'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BackupWrite: Pointer;

function BackupWrite;
begin
GetProcedureAddress(_BackupWrite, kernel32, ''BackupWrite'');
asm
mov esp, ebp

pop ebp
jmp [_BackupWrite]
end;
end;
{$ELSE}
function BackupWrite; external kernel32 name ''BackupWrite'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReadFileScatter: Pointer;

function ReadFileScatter;
begin
GetProcedureAddress(_ReadFileScatter, kernel32, ''ReadFileScatter'');
asm
mov esp, ebp
pop ebp
jmp [_ReadFileScatter]
end;
end;
{$ELSE}
function ReadFileScatter; external kernel32 name ''ReadFileScatter'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WriteFileGather: Pointer;

function WriteFileGather;
begin
GetProcedureAddress(_WriteFileGather, kernel32, ''WriteFileGather'');
asm
mov esp, ebp
pop ebp
jmp [_WriteFileGather]
end;
end;
{$ELSE}
function WriteFileGather; external kernel32 name ''WriteFileGather'';
{$ENDIF DYNAMIC_LINK}

{ MVB:
The implementation of CreateMutex only interpretes bInitialOwner as True if

it''s ordinal value is 1, all other values are interpreted as False. Delphi
compiles Longbool(True) as $FFFFFFFF which is consequently interpreted as
False. Changing the bInitalOwner parameter type to Boolean fixes the problem
(Boolean(True) = 1) but that would be implementation specific and might break
in the future, though unlikely. Hence the CreateMutex function here which
explicitly passes LongBool(1) instead of LongBool(True). }

type
TCreateMutexA = function (lpMutexAttributes: LPSECURITY_ATTRIBUTES; bInitialOwner: LongBool; lpName: LPCSTR): HANDLE; stdcall;
TCreateMutexW = function (lpMutexAttributes: LPSECURITY_ATTRIBUTES; bInitialOwner: LongBool; lpName: LPCWSTR): HANDLE; stdcall;

var
_CreateMutexA: Pointer;
_CreateMutexW: Pointer;

function CreateMutexA(lpMutexAttributes: LPSECURITY_ATTRIBUTES; bInitialOwner: BOOL; lpName: LPCSTR): HANDLE;
begin
GetProcedureAddress(_CreateMutexA, kernel32, ''CreateMutexA'');
if bInitialOwner then

Result := TCreateMutexA(_CreateMutexA)(lpMutexAttributes, LongBool(1), lpName)
else
Result := TCreateMutexA(_CreateMutexA)(lpMutexAttributes, LongBool(0), lpName)
end;

function CreateMutexW(lpMutexAttributes: LPSECURITY_ATTRIBUTES; bInitialOwner: BOOL; lpName: LPCWSTR): HANDLE;
begin
GetProcedureAddress(_CreateMutexW, kernel32, ''CreateMutexW'');
if bInitialOwner then
Result := TCreateMutexW(_CreateMutexW)(lpMutexAttributes, LongBool(1), lpName)
else
Result := TCreateMutexW(_CreateMutexW)(lpMutexAttributes, LongBool(0), lpName)
end;

{$IFDEF UNICODE}
function CreateMutex(lpMutexAttributes: LPSECURITY_ATTRIBUTES; bInitialOwner: BOOL; lpName: LPCWSTR): HANDLE;
begin
GetProcedureAddress(_CreateMutexW, kernel32, ''CreateMutexW'');
if bInitialOwner then
Result := TCreateMutexW(_CreateMutexW)(lpMutexAttributes, LongBool(1), lpName)
else
Result := TCreateMutexW(_CreateMutexW)(lpMutexAttributes, LongBool(0), lpName)

end;
{$ELSE}
function CreateMutex(lpMutexAttributes: LPSECURITY_ATTRIBUTES; bInitialOwner: BOOL; lpName: LPCSTR): HANDLE;
begin
GetProcedureAddress(_CreateMutexA, kernel32, ''CreateMutexA'');
if bInitialOwner then
Result := TCreateMutexA(_CreateMutexA)(lpMutexAttributes, LongBool(1), lpName)
else
Result := TCreateMutexA(_CreateMutexA)(lpMutexAttributes, LongBool(0), lpName)
end;
{$ENDIF}


{$IFDEF DYNAMIC_LINK}
var
_OpenMutexA: Pointer;

function OpenMutexA;
begin
GetProcedureAddress(_OpenMutexA, kernel32, ''OpenMutexA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenMutexA]
end;
end;
{$ELSE}
function OpenMutexA; external kernel32 name ''OpenMutexA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenMutexW: Pointer;

function OpenMutexW;
begin
GetProcedureAddress(_OpenMutexW, kernel32, ''OpenMutexW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenMutexW]

end;
end;
{$ELSE}
function OpenMutexW; external kernel32 name ''OpenMutexW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OpenMutex: Pointer;

function OpenMutex;
begin
GetProcedureAddress(_OpenMutex, kernel32, ''OpenMutexW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenMutex]
end;
end;
{$ELSE}
function OpenMutex; external kernel32 name ''OpenMutexW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OpenMutex: Pointer;

function OpenMutex;
begin
GetProcedureAddress(_OpenMutex, kernel32, ''OpenMutexA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenMutex]
end;
end;
{$ELSE}
function OpenMutex; external kernel32 name ''OpenMutexA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateEventA: Pointer;

function CreateEventA;
begin
GetProcedureAddress(_CreateEventA, kernel32, ''CreateEventA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEventA]
end;
end;
{$ELSE}
function CreateEventA; external kernel32 name ''CreateEventA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateEventW: Pointer;

function CreateEventW;
begin
GetProcedureAddress(_CreateEventW, kernel32, ''CreateEventW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEventW]
end;
end;
{$ELSE}
function CreateEventW; external kernel32 name ''CreateEventW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateEvent: Pointer;

function CreateEvent;
begin
GetProcedureAddress(_CreateEvent, kernel32, ''CreateEventW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEvent]
end;
end;
{$ELSE}
function CreateEvent; external kernel32 name ''CreateEventW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateEvent: Pointer;

function CreateEvent;
begin
GetProcedureAddress(_CreateEvent, kernel32, ''CreateEventA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEvent]
end;
end;
{$ELSE}
function CreateEvent; external kernel32 name ''CreateEventA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_OpenEventA: Pointer;

function OpenEventA;
begin
GetProcedureAddress(_OpenEventA, kernel32, ''OpenEventA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEventA]
end;
end;
{$ELSE}
function OpenEventA; external kernel32 name ''OpenEventA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenEventW: Pointer;

function OpenEventW;
begin
GetProcedureAddress(_OpenEventW, kernel32, ''OpenEventW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEventW]
end;
end;
{$ELSE}
function OpenEventW; external kernel32 name ''OpenEventW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OpenEvent: Pointer;

function OpenEvent;
begin
GetProcedureAddress(_OpenEvent, kernel32, ''OpenEventW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEvent]
end;
end;
{$ELSE}
function OpenEvent; external kernel32 name ''OpenEventW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OpenEvent: Pointer;

function OpenEvent;
begin
GetProcedureAddress(_OpenEvent, kernel32, ''OpenEventA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEvent]
end;
end;
{$ELSE}
function OpenEvent; external kernel32 name ''OpenEventA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateSemaphoreA: Pointer;

function CreateSemaphoreA;
begin
GetProcedureAddress(_CreateSemaphoreA, kernel32, ''CreateSemaphoreA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateSemaphoreA]
end;
end;
{$ELSE}
function CreateSemaphoreA; external kernel32 name ''CreateSemaphoreA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateSemaphoreW: Pointer;

function CreateSemaphoreW;
begin
GetProcedureAddress(_CreateSemaphoreW, kernel32, ''CreateSemaphoreW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateSemaphoreW]
end;
end;
{$ELSE}
function CreateSemaphoreW; external kernel32 name ''CreateSemaphoreW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateSemaphore: Pointer;

function CreateSemaphore;
begin
GetProcedureAddress(_CreateSemaphore, kernel32, ''CreateSemaphoreW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateSemaphore]
end;
end;
{$ELSE}
function CreateSemaphore; external kernel32 name ''CreateSemaphoreW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateSemaphore: Pointer;

function CreateSemaphore;

begin
GetProcedureAddress(_CreateSemaphore, kernel32, ''CreateSemaphoreA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateSemaphore]
end;
end;
{$ELSE}
function CreateSemaphore; external kernel32 name ''CreateSemaphoreA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_OpenSemaphoreA: Pointer;

function OpenSemaphoreA;
begin
GetProcedureAddress(_OpenSemaphoreA, kernel32, ''OpenSemaphoreA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenSemaphoreA]
end;
end;
{$ELSE}
function OpenSemaphoreA; external kernel32 name ''OpenSemaphoreA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenSemaphoreW: Pointer;

function OpenSemaphoreW;
begin
GetProcedureAddress(_OpenSemaphoreW, kernel32, ''OpenSemaphoreW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenSemaphoreW]
end;
end;
{$ELSE}
function OpenSemaphoreW; external kernel32 name ''OpenSemaphoreW'';

{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OpenSemaphore: Pointer;

function OpenSemaphore;
begin
GetProcedureAddress(_OpenSemaphore, kernel32, ''OpenSemaphoreW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenSemaphore]
end;
end;
{$ELSE}
function OpenSemaphore; external kernel32 name ''OpenSemaphoreW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OpenSemaphore: Pointer;

function OpenSemaphore;
begin
GetProcedureAddress(_OpenSemaphore, kernel32, ''OpenSemaphoreA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenSemaphore]
end;
end;
{$ELSE}
function OpenSemaphore; external kernel32 name ''OpenSemaphoreA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateWaitableTimerA: Pointer;

function CreateWaitableTimerA;
begin
GetProcedureAddress(_CreateWaitableTimerA, kernel32, ''CreateWaitableTimerA'');


asm
mov esp, ebp
pop ebp
jmp [_CreateWaitableTimerA]
end;
end;
{$ELSE}
function CreateWaitableTimerA; external kernel32 name ''CreateWaitableTimerA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateWaitableTimerW: Pointer;

function CreateWaitableTimerW;
begin
GetProcedureAddress(_CreateWaitableTimerW, kernel32, ''CreateWaitableTimerW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateWaitableTimerW]
end;
end;
{$ELSE}
function CreateWaitableTimerW; external kernel32 name ''CreateWaitableTimerW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateWaitableTimer: Pointer;

function CreateWaitableTimer;
begin
GetProcedureAddress(_CreateWaitableTimer, kernel32, ''CreateWaitableTimerW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateWaitableTimer]
end;
end;
{$ELSE}
function CreateWaitableTimer; external kernel32 name ''CreateWaitableTimerW'';

{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateWaitableTimer: Pointer;

function CreateWaitableTimer;
begin
GetProcedureAddress(_CreateWaitableTimer, kernel32, ''CreateWaitableTimerA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateWaitableTimer]
end;
end;
{$ELSE}
function CreateWaitableTimer; external kernel32 name ''CreateWaitableTimerA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_OpenWaitableTimerA: Pointer;

function OpenWaitableTimerA;
begin
GetProcedureAddress(_OpenWaitableTimerA, kernel32, ''OpenWaitableTimerA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenWaitableTimerA]
end;
end;
{$ELSE}
function OpenWaitableTimerA; external kernel32 name ''OpenWaitableTimerA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenWaitableTimerW: Pointer;

function OpenWaitableTimerW;
begin
GetProcedureAddress(_OpenWaitableTimerW, kernel32, ''OpenWaitableTimerW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenWaitableTimerW]
end;
end;
{$ELSE}
function OpenWaitableTimerW; external kernel32 name ''OpenWaitableTimerW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OpenWaitableTimer: Pointer;

function OpenWaitableTimer;
begin
GetProcedureAddress(_OpenWaitableTimer, kernel32, ''OpenWaitableTimerW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenWaitableTimer]
end;
end;
{$ELSE}
function OpenWaitableTimer; external kernel32 name ''OpenWaitableTimerW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OpenWaitableTimer: Pointer;

function OpenWaitableTimer;
begin
GetProcedureAddress(_OpenWaitableTimer, kernel32, ''OpenWaitableTimerA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenWaitableTimer]
end;
end;
{$ELSE}
function OpenWaitableTimer; external kernel32 name ''OpenWaitableTimerA'';

{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetWaitableTimer: Pointer;

function SetWaitableTimer;
begin
GetProcedureAddress(_SetWaitableTimer, kernel32, ''SetWaitableTimer'');
asm
mov esp, ebp
pop ebp
jmp [_SetWaitableTimer]
end;
end;
{$ELSE}
function SetWaitableTimer; external kernel32 name ''SetWaitableTimer'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CancelWaitableTimer: Pointer;

function CancelWaitableTimer;
begin
GetProcedureAddress(_CancelWaitableTimer, kernel32, ''CancelWaitableTimer'');
asm
mov esp, ebp
pop ebp
jmp [_CancelWaitableTimer]
end;
end;
{$ELSE}
function CancelWaitableTimer; external kernel32 name ''CancelWaitableTimer'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFileMappingA: Pointer;

function CreateFileMappingA;
begin
GetProcedureAddress(_CreateFileMappingA, kernel32, ''CreateFileMappingA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFileMappingA]
end;
end;
{$ELSE}
function CreateFileMappingA; external kernel32 name ''CreateFileMappingA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFileMappingW: Pointer;

function CreateFileMappingW;
begin
GetProcedureAddress(_CreateFileMappingW, kernel32, ''CreateFileMappingW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFileMappingW]
end;
end;
{$ELSE}
function CreateFileMappingW; external kernel32 name ''CreateFileMappingW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFileMapping: Pointer;

function CreateFileMapping;
begin
GetProcedureAddress(_CreateFileMapping, kernel32, ''CreateFileMappingW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFileMapping]
end;
end;
{$ELSE}
function CreateFileMapping; external kernel32 name ''CreateFileMappingW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFileMapping: Pointer;

function CreateFileMapping;
begin
GetProcedureAddress(_CreateFileMapping, kernel32, ''CreateFileMappingA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFileMapping]
end;
end;
{$ELSE}
function CreateFileMapping; external kernel32 name ''CreateFileMappingA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_OpenFileMappingA: Pointer;

function OpenFileMappingA;
begin
GetProcedureAddress(_OpenFileMappingA, kernel32, ''OpenFileMappingA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenFileMappingA]
end;
end;
{$ELSE}
function OpenFileMappingA; external kernel32 name ''OpenFileMappingA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenFileMappingW: Pointer;

function OpenFileMappingW;
begin
GetProcedureAddress(_OpenFileMappingW, kernel32, ''OpenFileMappingW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenFileMappingW]
end;
end;
{$ELSE}
function OpenFileMappingW; external kernel32 name ''OpenFileMappingW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OpenFileMapping: Pointer;

function OpenFileMapping;
begin
GetProcedureAddress(_OpenFileMapping, kernel32, ''OpenFileMappingW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenFileMapping]
end;
end;
{$ELSE}
function OpenFileMapping; external kernel32 name ''OpenFileMappingW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OpenFileMapping: Pointer;

function OpenFileMapping;
begin
GetProcedureAddress(_OpenFileMapping, kernel32, ''OpenFileMappingA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenFileMapping]
end;
end;
{$ELSE}
function OpenFileMapping; external kernel32 name ''OpenFileMappingA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetLogicalDriveStringsA: Pointer;

function GetLogicalDriveStringsA;
begin
GetProcedureAddress(_GetLogicalDriveStringsA, kernel32, ''GetLogicalDriveStringsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetLogicalDriveStringsA]
end;
end;
{$ELSE}
function GetLogicalDriveStringsA; external kernel32 name ''GetLogicalDriveStringsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLogicalDriveStringsW: Pointer;

function GetLogicalDriveStringsW;
begin
GetProcedureAddress(_GetLogicalDriveStringsW, kernel32, ''GetLogicalDriveStringsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetLogicalDriveStringsW]
end;
end;
{$ELSE}
function GetLogicalDriveStringsW; external kernel32 name ''GetLogicalDriveStringsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetLogicalDriveStrings: Pointer;

function GetLogicalDriveStrings;


begin
GetProcedureAddress(_GetLogicalDriveStrings, kernel32, ''GetLogicalDriveStringsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetLogicalDriveStrings]
end;
end;
{$ELSE}
function GetLogicalDriveStrings; external kernel32 name ''GetLogicalDriveStringsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetLogicalDriveStrings: Pointer;

function GetLogicalDriveStrings;
begin
GetProcedureAddress(_GetLogicalDriveStrings, kernel32, ''GetLogicalDriveStringsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetLogicalDriveStrings]
end;
end;
{$ELSE}
function GetLogicalDriveStrings; external kernel32 name ''GetLogicalDriveStringsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateMemResNotification: Pointer;

function CreateMemoryResourceNotification;
begin
GetProcedureAddress(_CreateMemResNotification, kernel32, ''CreateMemoryResourceNotification'');
asm
mov esp, ebp
pop ebp
jmp [_CreateMemResNotification]
end;
end;
{$ELSE}
function CreateMemoryResourceNotification; external kernel32 name ''CreateMemoryResourceNotification'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_QueryMemoryResourceNotification: Pointer;

function QueryMemoryResourceNotification;
begin
GetProcedureAddress(_QueryMemoryResourceNotification, kernel32, ''QueryMemoryResourceNotification'');
asm
mov esp, ebp
pop ebp
jmp [_QueryMemoryResourceNotification]
end;
end;
{$ELSE}
function QueryMemoryResourceNotification; external kernel32 name ''QueryMemoryResourceNotification'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LoadLibraryA: Pointer;

function LoadLibraryA;
begin
GetProcedureAddress(_LoadLibraryA, kernel32, ''LoadLibraryA'');
asm
mov esp, ebp
pop ebp
jmp [_LoadLibraryA]
end;
end;
{$ELSE}
function LoadLibraryA; external kernel32 name ''LoadLibraryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LoadLibraryW: Pointer;

function LoadLibraryW;
begin
GetProcedureAddress(_LoadLibraryW, kernel32, ''LoadLibraryW'');
asm
mov esp, ebp
pop ebp
jmp [_LoadLibraryW]
end;
end;
{$ELSE}
function LoadLibraryW; external kernel32 name ''LoadLibraryW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_LoadLibrary: Pointer;

function LoadLibrary;
begin
GetProcedureAddress(_LoadLibrary, kernel32, ''LoadLibraryW'');
asm
mov esp, ebp
pop ebp
jmp [_LoadLibrary]
end;
end;
{$ELSE}
function LoadLibrary; external kernel32 name ''LoadLibraryW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_LoadLibrary: Pointer;

function LoadLibrary;
begin
GetProcedureAddress(_LoadLibrary, kernel32, ''LoadLibraryA'');
asm
mov esp, ebp
pop ebp
jmp [_LoadLibrary]
end;
end;
{$ELSE}
function LoadLibrary; external kernel32 name ''LoadLibraryA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_LoadLibraryExA: Pointer;

function LoadLibraryExA;
begin
GetProcedureAddress(_LoadLibraryExA, kernel32, ''LoadLibraryExA'');
asm
mov esp, ebp
pop ebp
jmp [_LoadLibraryExA]
end;
end;
{$ELSE}
function LoadLibraryExA; external kernel32 name ''LoadLibraryExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LoadLibraryExW: Pointer;

function LoadLibraryExW;
begin
GetProcedureAddress(_LoadLibraryExW, kernel32, ''LoadLibraryExW'');
asm
mov esp, ebp
pop ebp
jmp [_LoadLibraryExW]
end;
end;
{$ELSE}
function LoadLibraryExW; external kernel32 name ''LoadLibraryExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_LoadLibraryEx: Pointer;

function LoadLibraryEx;
begin
GetProcedureAddress(_LoadLibraryEx, kernel32, ''LoadLibraryExW'');
asm
mov esp, ebp
pop ebp
jmp [_LoadLibraryEx]
end;
end;
{$ELSE}
function LoadLibraryEx; external kernel32 name ''LoadLibraryExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_LoadLibraryEx: Pointer;

function LoadLibraryEx;
begin
GetProcedureAddress(_LoadLibraryEx, kernel32, ''LoadLibraryExA'');
asm
mov esp, ebp
pop ebp
jmp [_LoadLibraryEx]
end;
end;
{$ELSE}
function LoadLibraryEx; external kernel32 name ''LoadLibraryExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleFileNameA: Pointer;

function GetModuleFileNameA;
begin
GetProcedureAddress(_GetModuleFileNameA, kernel32, ''GetModuleFileNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleFileNameA]
end;
end;
{$ELSE}
function GetModuleFileNameA; external kernel32 name ''GetModuleFileNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleFileNameW: Pointer;

function GetModuleFileNameW;
begin
GetProcedureAddress(_GetModuleFileNameW, kernel32, ''GetModuleFileNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleFileNameW]
end;
end;
{$ELSE}
function GetModuleFileNameW; external kernel32 name ''GetModuleFileNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleFileName: Pointer;

function GetModuleFileName;
begin
GetProcedureAddress(_GetModuleFileName, kernel32, ''GetModuleFileNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleFileName]
end;
end;
{$ELSE}
function GetModuleFileName; external kernel32 name ''GetModuleFileNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var


_GetModuleFileName: Pointer;

function GetModuleFileName;
begin
GetProcedureAddress(_GetModuleFileName, kernel32, ''GetModuleFileNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleFileName]
end;
end;
{$ELSE}
function GetModuleFileName; external kernel32 name ''GetModuleFileNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleHandleA: Pointer;

function GetModuleHandleA;
begin
GetProcedureAddress(_GetModuleHandleA, kernel32, ''GetModuleHandleA'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleHandleA]
end;
end;
{$ELSE}
function GetModuleHandleA; external kernel32 name ''GetModuleHandleA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleHandleW: Pointer;

function GetModuleHandleW;
begin
GetProcedureAddress(_GetModuleHandleW, kernel32, ''GetModuleHandleW'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleHandleW]


end;
end;
{$ELSE}
function GetModuleHandleW; external kernel32 name ''GetModuleHandleW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleHandle: Pointer;

function GetModuleHandle;
begin
GetProcedureAddress(_GetModuleHandle, kernel32, ''GetModuleHandleW'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleHandle]
end;
end;
{$ELSE}
function GetModuleHandle; external kernel32 name ''GetModuleHandleW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleHandle: Pointer;

function GetModuleHandle;
begin
GetProcedureAddress(_GetModuleHandle, kernel32, ''GetModuleHandleA'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleHandle]
end;
end;
{$ELSE}
function GetModuleHandle; external kernel32 name ''GetModuleHandleA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcessA: Pointer;



function CreateProcessA;
begin
GetProcedureAddress(_CreateProcessA, kernel32, ''CreateProcessA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcessA]
end;
end;
{$ELSE}
function CreateProcessA; external kernel32 name ''CreateProcessA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcessW: Pointer;

function CreateProcessW;
begin
GetProcedureAddress(_CreateProcessW, kernel32, ''CreateProcessW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcessW]
end;
end;
{$ELSE}
function CreateProcessW; external kernel32 name ''CreateProcessW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcess: Pointer;

function CreateProcess;
begin
GetProcedureAddress(_CreateProcess, kernel32, ''CreateProcessW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcess]
end;
end;
{$ELSE}
function CreateProcess; external kernel32 name ''CreateProcessW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcess: Pointer;

function CreateProcess;
begin
GetProcedureAddress(_CreateProcess, kernel32, ''CreateProcessA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcess]
end;
end;
{$ELSE}
function CreateProcess; external kernel32 name ''CreateProcessA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleHandleExA: Pointer;

function GetModuleHandleExA;
begin
GetProcedureAddress(_GetModuleHandleExA, kernel32, ''GetModuleHandleExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleHandleExA]
end;
end;
{$ELSE}
function GetModuleHandleExA; external kernel32 name ''GetModuleHandleExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleHandleExW: Pointer;

function GetModuleHandleExW;
begin
GetProcedureAddress(_GetModuleHandleExW, kernel32, ''GetModuleHandleExW'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleHandleExW]
end;
end;
{$ELSE}
function GetModuleHandleExW; external kernel32 name ''GetModuleHandleExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleHandleEx: Pointer;

function GetModuleHandleEx;
begin
GetProcedureAddress(_GetModuleHandleEx, kernel32, ''GetModuleHandleExW'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleHandleEx]
end;
end;
{$ELSE}
function GetModuleHandleEx; external kernel32 name ''GetModuleHandleExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetModuleHandleEx: Pointer;

function GetModuleHandleEx;
begin
GetProcedureAddress(_GetModuleHandleEx, kernel32, ''GetModuleHandleExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetModuleHandleEx]
end;
end;
{$ELSE}
function GetModuleHandleEx; external kernel32 name ''GetModuleHandleExA'';

{$ENDIF DYNAMIC_LINK}
{$ENDIF}


{$IFDEF DYNAMIC_LINK}
var
_SetProcessShutdownParameters: Pointer;

function SetProcessShutdownParameters;
begin
GetProcedureAddress(_SetProcessShutdownParameters, kernel32, ''SetProcessShutdownParameters'');
asm
mov esp, ebp
pop ebp
jmp [_SetProcessShutdownParameters]
end;
end;
{$ELSE}
function SetProcessShutdownParameters; external kernel32 name ''SetProcessShutdownParameters'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessShutdownParameters: Pointer;

function GetProcessShutdownParameters;
begin
GetProcedureAddress(_GetProcessShutdownParameters, kernel32, ''GetProcessShutdownParameters'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessShutdownParameters]
end;
end;
{$ELSE}
function GetProcessShutdownParameters; external kernel32 name ''GetProcessShutdownParameters'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProcessVersion: Pointer;

function GetProcessVersion;
begin
GetProcedureAddress(_GetProcessVersion, kernel32, ''GetProcessVersion'');
asm
mov esp, ebp
pop ebp
jmp [_GetProcessVersion]
end;
end;
{$ELSE}
function GetProcessVersion; external kernel32 name ''GetProcessVersion'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FatalAppExitA: Pointer;

procedure FatalAppExitA;
begin
GetProcedureAddress(_FatalAppExitA, kernel32, ''FatalAppExitA'');
asm
mov esp, ebp
pop ebp
jmp [_FatalAppExitA]
end;
end;
{$ELSE}
procedure FatalAppExitA; external kernel32 name ''FatalAppExitA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FatalAppExitW: Pointer;

procedure FatalAppExitW;
begin
GetProcedureAddress(_FatalAppExitW, kernel32, ''FatalAppExitW'');
asm
mov esp, ebp
pop ebp
jmp [_FatalAppExitW]
end;


end;
{$ELSE}
procedure FatalAppExitW; external kernel32 name ''FatalAppExitW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FatalAppExit: Pointer;

procedure FatalAppExit;
begin
GetProcedureAddress(_FatalAppExit, kernel32, ''FatalAppExitW'');
asm
mov esp, ebp
pop ebp
jmp [_FatalAppExit]
end;
end;
{$ELSE}
procedure FatalAppExit; external kernel32 name ''FatalAppExitW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FatalAppExit: Pointer;

procedure FatalAppExit;
begin
GetProcedureAddress(_FatalAppExit, kernel32, ''FatalAppExitA'');
asm
mov esp, ebp
pop ebp
jmp [_FatalAppExit]
end;
end;
{$ELSE}
procedure FatalAppExit; external kernel32 name ''FatalAppExitA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetStartupInfoA: Pointer;

procedure GetStartupInfoA;
begin
GetProcedureAddress(_GetStartupInfoA, kernel32, ''GetStartupInfoA'');
asm
mov esp, ebp
pop ebp
jmp [_GetStartupInfoA]
end;
end;
{$ELSE}
procedure GetStartupInfoA; external kernel32 name ''GetStartupInfoA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetStartupInfoW: Pointer;

procedure GetStartupInfoW;
begin
GetProcedureAddress(_GetStartupInfoW, kernel32, ''GetStartupInfoW'');
asm
mov esp, ebp
pop ebp
jmp [_GetStartupInfoW]
end;
end;
{$ELSE}
procedure GetStartupInfoW; external kernel32 name ''GetStartupInfoW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetStartupInfo: Pointer;

procedure GetStartupInfo;
begin
GetProcedureAddress(_GetStartupInfo, kernel32, ''GetStartupInfoW'');
asm
mov esp, ebp
pop ebp
jmp [_GetStartupInfo]
end;
end;
{$ELSE}
procedure GetStartupInfo; external kernel32 name ''GetStartupInfoW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetStartupInfo: Pointer;

procedure GetStartupInfo;
begin
GetProcedureAddress(_GetStartupInfo, kernel32, ''GetStartupInfoA'');
asm
mov esp, ebp
pop ebp
jmp [_GetStartupInfo]
end;
end;
{$ELSE}
procedure GetStartupInfo; external kernel32 name ''GetStartupInfoA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetCommandLineA: Pointer;

function GetCommandLineA;
begin
GetProcedureAddress(_GetCommandLineA, kernel32, ''GetCommandLineA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommandLineA]
end;
end;
{$ELSE}
function GetCommandLineA; external kernel32 name ''GetCommandLineA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCommandLineW: Pointer;

function GetCommandLineW;
begin
GetProcedureAddress(_GetCommandLineW, kernel32, ''GetCommandLineW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommandLineW]
end;
end;
{$ELSE}
function GetCommandLineW; external kernel32 name ''GetCommandLineW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCommandLine: Pointer;

function GetCommandLine;
begin
GetProcedureAddress(_GetCommandLine, kernel32, ''GetCommandLineW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommandLine]
end;
end;
{$ELSE}
function GetCommandLine; external kernel32 name ''GetCommandLineW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCommandLine: Pointer;

function GetCommandLine;
begin
GetProcedureAddress(_GetCommandLine, kernel32, ''GetCommandLineA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCommandLine]
end;
end;
{$ELSE}
function GetCommandLine; external kernel32 name ''GetCommandLineA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetEnvironmentVariableA: Pointer;

function GetEnvironmentVariableA;
begin
GetProcedureAddress(_GetEnvironmentVariableA, kernel32, ''GetEnvironmentVariableA'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnvironmentVariableA]
end;
end;
{$ELSE}
function GetEnvironmentVariableA; external kernel32 name ''GetEnvironmentVariableA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetEnvironmentVariableW: Pointer;

function GetEnvironmentVariableW;
begin
GetProcedureAddress(_GetEnvironmentVariableW, kernel32, ''GetEnvironmentVariableW'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnvironmentVariableW]
end;
end;
{$ELSE}
function GetEnvironmentVariableW; external kernel32 name ''GetEnvironmentVariableW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetEnvironmentVariable: Pointer;

function GetEnvironmentVariable;
begin
GetProcedureAddress(_GetEnvironmentVariable, kernel32, ''GetEnvironmentVariableW'');


asm
mov esp, ebp
pop ebp
jmp [_GetEnvironmentVariable]
end;
end;
{$ELSE}
function GetEnvironmentVariable; external kernel32 name ''GetEnvironmentVariableW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetEnvironmentVariable: Pointer;

function GetEnvironmentVariable;
begin
GetProcedureAddress(_GetEnvironmentVariable, kernel32, ''GetEnvironmentVariableA'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnvironmentVariable]
end;
end;
{$ELSE}
function GetEnvironmentVariable; external kernel32 name ''GetEnvironmentVariableA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetEnvironmentVariableA: Pointer;

function SetEnvironmentVariableA;
begin
GetProcedureAddress(_SetEnvironmentVariableA, kernel32, ''SetEnvironmentVariableA'');
asm
mov esp, ebp
pop ebp
jmp [_SetEnvironmentVariableA]
end;
end;
{$ELSE}

function SetEnvironmentVariableA; external kernel32 name ''SetEnvironmentVariableA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetEnvironmentVariableW: Pointer;

function SetEnvironmentVariableW;
begin
GetProcedureAddress(_SetEnvironmentVariableW, kernel32, ''SetEnvironmentVariableW'');
asm
mov esp, ebp
pop ebp
jmp [_SetEnvironmentVariableW]
end;
end;
{$ELSE}
function SetEnvironmentVariableW; external kernel32 name ''SetEnvironmentVariableW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetEnvironmentVariable: Pointer;

function SetEnvironmentVariable;
begin
GetProcedureAddress(_SetEnvironmentVariable, kernel32, ''SetEnvironmentVariableW'');
asm
mov esp, ebp
pop ebp
jmp [_SetEnvironmentVariable]
end;
end;
{$ELSE}
function SetEnvironmentVariable; external kernel32 name ''SetEnvironmentVariableW'';
{$ENDIF DYNAMIC_LINK}

{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetEnvironmentVariable: Pointer;

function SetEnvironmentVariable;
begin
GetProcedureAddress(_SetEnvironmentVariable, kernel32, ''SetEnvironmentVariableA'');
asm
mov esp, ebp
pop ebp
jmp [_SetEnvironmentVariable]
end;
end;
{$ELSE}
function SetEnvironmentVariable; external kernel32 name ''SetEnvironmentVariableA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ExpandEnvironmentStringsA: Pointer;

function ExpandEnvironmentStringsA;
begin
GetProcedureAddress(_ExpandEnvironmentStringsA, kernel32, ''ExpandEnvironmentStringsA'');
asm
mov esp, ebp
pop ebp
jmp [_ExpandEnvironmentStringsA]
end;
end;
{$ELSE}
function ExpandEnvironmentStringsA; external kernel32 name ''ExpandEnvironmentStringsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExpandEnvironmentStringsW: Pointer;

function ExpandEnvironmentStringsW;


begin
GetProcedureAddress(_ExpandEnvironmentStringsW, kernel32, ''ExpandEnvironmentStringsW'');
asm
mov esp, ebp
pop ebp
jmp [_ExpandEnvironmentStringsW]
end;
end;
{$ELSE}
function ExpandEnvironmentStringsW; external kernel32 name ''ExpandEnvironmentStringsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ExpandEnvironmentStrings: Pointer;

function ExpandEnvironmentStrings;
begin
GetProcedureAddress(_ExpandEnvironmentStrings, kernel32, ''ExpandEnvironmentStringsW'');
asm
mov esp, ebp
pop ebp
jmp [_ExpandEnvironmentStrings]
end;
end;
{$ELSE}
function ExpandEnvironmentStrings; external kernel32 name ''ExpandEnvironmentStringsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ExpandEnvironmentStrings: Pointer;

function ExpandEnvironmentStrings;
begin
GetProcedureAddress(_ExpandEnvironmentStrings, kernel32, ''ExpandEnvironmentStringsA'');
asm
mov esp, ebp
pop ebp
jmp [_ExpandEnvironmentStrings]
end;
end;
{$ELSE}
function ExpandEnvironmentStrings; external kernel32 name ''ExpandEnvironmentStringsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetFirmwareEnvironmentVariableA: Pointer;

function GetFirmwareEnvironmentVariableA;
begin
GetProcedureAddress(_GetFirmwareEnvironmentVariableA, kernel32, ''GetFirmwareEnvironmentVariableA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFirmwareEnvironmentVariableA]
end;
end;
{$ELSE}
function GetFirmwareEnvironmentVariableA; external kernel32 name ''GetFirmwareEnvironmentVariableA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFirmwareEnvironmentVariableW: Pointer;

function GetFirmwareEnvironmentVariableW;
begin
GetProcedureAddress(_GetFirmwareEnvironmentVariableW, kernel32, ''GetFirmwareEnvironmentVariableW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFirmwareEnvironmentVariableW]
end;
end;
{$ELSE}
function GetFirmwareEnvironmentVariableW; external kernel32 name ''GetFirmwareEnvironmentVariableW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetFirmwareEnvironmentVariable: Pointer;

function GetFirmwareEnvironmentVariable;
begin
GetProcedureAddress(_GetFirmwareEnvironmentVariable, kernel32, ''GetFirmwareEnvironmentVariableW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFirmwareEnvironmentVariable]
end;
end;
{$ELSE}
function GetFirmwareEnvironmentVariable; external kernel32 name ''GetFirmwareEnvironmentVariableW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetFirmwareEnvironmentVariable: Pointer;

function GetFirmwareEnvironmentVariable;
begin
GetProcedureAddress(_GetFirmwareEnvironmentVariable, kernel32, ''GetFirmwareEnvironmentVariableA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFirmwareEnvironmentVariable]
end;
end;
{$ELSE}
function GetFirmwareEnvironmentVariable; external kernel32 name ''GetFirmwareEnvironmentVariableA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetFirmwareEnvironmentVariableA: Pointer;

function SetFirmwareEnvironmentVariableA;
begin
GetProcedureAddress(_SetFirmwareEnvironmentVariableA, kernel32, ''SetFirmwareEnvironmentVariableA'');
asm
mov esp, ebp
pop ebp
jmp [_SetFirmwareEnvironmentVariableA]
end;
end;
{$ELSE}
function SetFirmwareEnvironmentVariableA; external kernel32 name ''SetFirmwareEnvironmentVariableA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFirmwareEnvironmentVariableW: Pointer;

function SetFirmwareEnvironmentVariableW;
begin
GetProcedureAddress(_SetFirmwareEnvironmentVariableW, kernel32, ''SetFirmwareEnvironmentVariableW'');
asm
mov esp, ebp
pop ebp
jmp [_SetFirmwareEnvironmentVariableW]
end;
end;
{$ELSE}
function SetFirmwareEnvironmentVariableW; external kernel32 name ''SetFirmwareEnvironmentVariableW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetFirmwareEnvironmentVariable: Pointer;

function SetFirmwareEnvironmentVariable;
begin
GetProcedureAddress(_SetFirmwareEnvironmentVariable, kernel32, ''SetFirmwareEnvironmentVariableW'');
asm
mov esp, ebp
pop ebp
jmp [_SetFirmwareEnvironmentVariable]
end;
end;
{$ELSE}
function SetFirmwareEnvironmentVariable; external kernel32 name ''SetFirmwareEnvironmentVariableW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetFirmwareEnvironmentVariable: Pointer;

function SetFirmwareEnvironmentVariable;
begin
GetProcedureAddress(_SetFirmwareEnvironmentVariable, kernel32, ''SetFirmwareEnvironmentVariableA'');
asm
mov esp, ebp
pop ebp
jmp [_SetFirmwareEnvironmentVariable]
end;
end;
{$ELSE}
function SetFirmwareEnvironmentVariable; external kernel32 name ''SetFirmwareEnvironmentVariableA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}


{$IFDEF DYNAMIC_LINK}
var
_OutputDebugStringA: Pointer;

procedure OutputDebugStringA;
begin
GetProcedureAddress(_OutputDebugStringA, kernel32, ''OutputDebugStringA'');
asm
mov esp, ebp
pop ebp
jmp [_OutputDebugStringA]
end;
end;
{$ELSE}
procedure OutputDebugStringA; external kernel32 name ''OutputDebugStringA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OutputDebugStringW: Pointer;

procedure OutputDebugStringW;
begin
GetProcedureAddress(_OutputDebugStringW, kernel32, ''OutputDebugStringW'');
asm
mov esp, ebp
pop ebp
jmp [_OutputDebugStringW]
end;
end;
{$ELSE}
procedure OutputDebugStringW; external kernel32 name ''OutputDebugStringW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OutputDebugString: Pointer;

procedure OutputDebugString;
begin
GetProcedureAddress(_OutputDebugString, kernel32, ''OutputDebugStringW'');
asm
mov esp, ebp
pop ebp
jmp [_OutputDebugString]
end;
end;
{$ELSE}
procedure OutputDebugString; external kernel32 name ''OutputDebugStringW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OutputDebugString: Pointer;

procedure OutputDebugString;
begin
GetProcedureAddress(_OutputDebugString, kernel32, ''OutputDebugStringA'');
asm
mov esp, ebp
pop ebp
jmp [_OutputDebugString]
end;
end;
{$ELSE}
procedure OutputDebugString; external kernel32 name ''OutputDebugStringA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindResourceA: Pointer;

function FindResourceA;
begin
GetProcedureAddress(_FindResourceA, kernel32, ''FindResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_FindResourceA]
end;
end;
{$ELSE}
function FindResourceA; external kernel32 name ''FindResourceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindResourceW: Pointer;

function FindResourceW;
begin
GetProcedureAddress(_FindResourceW, kernel32, ''FindResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_FindResourceW]
end;
end;
{$ELSE}
function FindResourceW; external kernel32 name ''FindResourceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindResource: Pointer;

function FindResource;
begin
GetProcedureAddress(_FindResource, kernel32, ''FindResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_FindResource]
end;
end;
{$ELSE}
function FindResource; external kernel32 name ''FindResourceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindResource: Pointer;



function FindResource;
begin
GetProcedureAddress(_FindResource, kernel32, ''FindResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_FindResource]
end;
end;
{$ELSE}
function FindResource; external kernel32 name ''FindResourceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindResourceExA: Pointer;

function FindResourceExA;
begin
GetProcedureAddress(_FindResourceExA, kernel32, ''FindResourceExA'');
asm
mov esp, ebp
pop ebp
jmp [_FindResourceExA]
end;
end;
{$ELSE}
function FindResourceExA; external kernel32 name ''FindResourceExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindResourceExW: Pointer;

function FindResourceExW;
begin
GetProcedureAddress(_FindResourceExW, kernel32, ''FindResourceExW'');
asm
mov esp, ebp
pop ebp
jmp [_FindResourceExW]
end;
end;
{$ELSE}
function FindResourceExW; external kernel32 name ''FindResourceExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindResourceEx: Pointer;

function FindResourceEx;
begin
GetProcedureAddress(_FindResourceEx, kernel32, ''FindResourceExW'');
asm
mov esp, ebp
pop ebp
jmp [_FindResourceEx]
end;
end;
{$ELSE}
function FindResourceEx; external kernel32 name ''FindResourceExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindResourceEx: Pointer;

function FindResourceEx;
begin
GetProcedureAddress(_FindResourceEx, kernel32, ''FindResourceExA'');
asm
mov esp, ebp
pop ebp
jmp [_FindResourceEx]
end;
end;
{$ELSE}
function FindResourceEx; external kernel32 name ''FindResourceExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceTypesA: Pointer;

function EnumResourceTypesA;
begin
GetProcedureAddress(_EnumResourceTypesA, kernel32, ''EnumResourceTypesA'');

asm
mov esp, ebp
pop ebp
jmp [_EnumResourceTypesA]
end;
end;
{$ELSE}
function EnumResourceTypesA; external kernel32 name ''EnumResourceTypesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceTypesW: Pointer;

function EnumResourceTypesW;
begin
GetProcedureAddress(_EnumResourceTypesW, kernel32, ''EnumResourceTypesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceTypesW]
end;
end;
{$ELSE}
function EnumResourceTypesW; external kernel32 name ''EnumResourceTypesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceTypes: Pointer;

function EnumResourceTypes;
begin
GetProcedureAddress(_EnumResourceTypes, kernel32, ''EnumResourceTypesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceTypes]
end;
end;
{$ELSE}
function EnumResourceTypes; external kernel32 name ''EnumResourceTypesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceTypes: Pointer;

function EnumResourceTypes;
begin
GetProcedureAddress(_EnumResourceTypes, kernel32, ''EnumResourceTypesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceTypes]
end;
end;
{$ELSE}
function EnumResourceTypes; external kernel32 name ''EnumResourceTypesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceNamesA: Pointer;

function EnumResourceNamesA;
begin
GetProcedureAddress(_EnumResourceNamesA, kernel32, ''EnumResourceNamesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceNamesA]
end;
end;
{$ELSE}
function EnumResourceNamesA; external kernel32 name ''EnumResourceNamesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceNamesW: Pointer;

function EnumResourceNamesW;
begin
GetProcedureAddress(_EnumResourceNamesW, kernel32, ''EnumResourceNamesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceNamesW]
end;
end;
{$ELSE}
function EnumResourceNamesW; external kernel32 name ''EnumResourceNamesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceNames: Pointer;

function EnumResourceNames;
begin
GetProcedureAddress(_EnumResourceNames, kernel32, ''EnumResourceNamesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceNames]
end;
end;
{$ELSE}
function EnumResourceNames; external kernel32 name ''EnumResourceNamesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceNames: Pointer;

function EnumResourceNames;
begin
GetProcedureAddress(_EnumResourceNames, kernel32, ''EnumResourceNamesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceNames]
end;
end;
{$ELSE}
function EnumResourceNames; external kernel32 name ''EnumResourceNamesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceLanguagesA: Pointer;

function EnumResourceLanguagesA;
begin
GetProcedureAddress(_EnumResourceLanguagesA, kernel32, ''EnumResourceLanguagesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceLanguagesA]
end;
end;
{$ELSE}
function EnumResourceLanguagesA; external kernel32 name ''EnumResourceLanguagesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceLanguagesW: Pointer;

function EnumResourceLanguagesW;
begin
GetProcedureAddress(_EnumResourceLanguagesW, kernel32, ''EnumResourceLanguagesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceLanguagesW]
end;
end;
{$ELSE}
function EnumResourceLanguagesW; external kernel32 name ''EnumResourceLanguagesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceLanguages: Pointer;

function EnumResourceLanguages;
begin
GetProcedureAddress(_EnumResourceLanguages, kernel32, ''EnumResourceLanguagesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceLanguages]
end;
end;
{$ELSE}
function EnumResourceLanguages; external kernel32 name ''EnumResourceLanguagesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EnumResourceLanguages: Pointer;

function EnumResourceLanguages;
begin
GetProcedureAddress(_EnumResourceLanguages, kernel32, ''EnumResourceLanguagesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumResourceLanguages]
end;
end;
{$ELSE}
function EnumResourceLanguages; external kernel32 name ''EnumResourceLanguagesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_BeginUpdateResourceA: Pointer;

function BeginUpdateResourceA;
begin
GetProcedureAddress(_BeginUpdateResourceA, kernel32, ''BeginUpdateResourceA'');
asm
mov esp, ebp
pop ebp


jmp [_BeginUpdateResourceA]
end;
end;
{$ELSE}
function BeginUpdateResourceA; external kernel32 name ''BeginUpdateResourceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BeginUpdateResourceW: Pointer;

function BeginUpdateResourceW;
begin
GetProcedureAddress(_BeginUpdateResourceW, kernel32, ''BeginUpdateResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_BeginUpdateResourceW]
end;
end;
{$ELSE}
function BeginUpdateResourceW; external kernel32 name ''BeginUpdateResourceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_BeginUpdateResource: Pointer;

function BeginUpdateResource;
begin
GetProcedureAddress(_BeginUpdateResource, kernel32, ''BeginUpdateResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_BeginUpdateResource]
end;
end;
{$ELSE}
function BeginUpdateResource; external kernel32 name ''BeginUpdateResourceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_BeginUpdateResource: Pointer;

function BeginUpdateResource;
begin
GetProcedureAddress(_BeginUpdateResource, kernel32, ''BeginUpdateResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_BeginUpdateResource]
end;
end;
{$ELSE}
function BeginUpdateResource; external kernel32 name ''BeginUpdateResourceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_UpdateResourceA: Pointer;

function UpdateResourceA;
begin
GetProcedureAddress(_UpdateResourceA, kernel32, ''UpdateResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_UpdateResourceA]
end;
end;
{$ELSE}
function UpdateResourceA; external kernel32 name ''UpdateResourceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UpdateResourceW: Pointer;

function UpdateResourceW;
begin
GetProcedureAddress(_UpdateResourceW, kernel32, ''UpdateResourceW'');


asm
mov esp, ebp
pop ebp
jmp [_UpdateResourceW]
end;
end;
{$ELSE}
function UpdateResourceW; external kernel32 name ''UpdateResourceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_UpdateResource: Pointer;

function UpdateResource;
begin
GetProcedureAddress(_UpdateResource, kernel32, ''UpdateResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_UpdateResource]
end;
end;
{$ELSE}
function UpdateResource; external kernel32 name ''UpdateResourceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_UpdateResource: Pointer;

function UpdateResource;
begin
GetProcedureAddress(_UpdateResource, kernel32, ''UpdateResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_UpdateResource]
end;
end;
{$ELSE}
function UpdateResource; external kernel32 name ''UpdateResourceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}


{$IFDEF DYNAMIC_LINK}
var
_EndUpdateResourceA: Pointer;

function EndUpdateResourceA;
begin
GetProcedureAddress(_EndUpdateResourceA, kernel32, ''EndUpdateResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_EndUpdateResourceA]
end;
end;
{$ELSE}
function EndUpdateResourceA; external kernel32 name ''EndUpdateResourceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EndUpdateResourceW: Pointer;

function EndUpdateResourceW;
begin
GetProcedureAddress(_EndUpdateResourceW, kernel32, ''EndUpdateResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_EndUpdateResourceW]
end;
end;
{$ELSE}
function EndUpdateResourceW; external kernel32 name ''EndUpdateResourceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EndUpdateResource: Pointer;

function EndUpdateResource;
begin
GetProcedureAddress(_EndUpdateResource, kernel32, ''EndUpdateResourceW'');

asm
mov esp, ebp
pop ebp
jmp [_EndUpdateResource]
end;
end;
{$ELSE}
function EndUpdateResource; external kernel32 name ''EndUpdateResourceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EndUpdateResource: Pointer;

function EndUpdateResource;
begin
GetProcedureAddress(_EndUpdateResource, kernel32, ''EndUpdateResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_EndUpdateResource]
end;
end;
{$ELSE}
function EndUpdateResource; external kernel32 name ''EndUpdateResourceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GlobalAddAtomA: Pointer;

function GlobalAddAtomA;
begin
GetProcedureAddress(_GlobalAddAtomA, kernel32, ''GlobalAddAtomA'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalAddAtomA]
end;
end;
{$ELSE}
function GlobalAddAtomA; external kernel32 name ''GlobalAddAtomA'';
{$ENDIF DYNAMIC_LINK}



{$IFDEF DYNAMIC_LINK}
var
_GlobalAddAtomW: Pointer;

function GlobalAddAtomW;
begin
GetProcedureAddress(_GlobalAddAtomW, kernel32, ''GlobalAddAtomW'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalAddAtomW]
end;
end;
{$ELSE}
function GlobalAddAtomW; external kernel32 name ''GlobalAddAtomW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GlobalAddAtom: Pointer;

function GlobalAddAtom;
begin
GetProcedureAddress(_GlobalAddAtom, kernel32, ''GlobalAddAtomW'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalAddAtom]
end;
end;
{$ELSE}
function GlobalAddAtom; external kernel32 name ''GlobalAddAtomW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GlobalAddAtom: Pointer;

function GlobalAddAtom;
begin
GetProcedureAddress(_GlobalAddAtom, kernel32, ''GlobalAddAtomA'');
asm
mov esp, ebp
pop ebp


jmp [_GlobalAddAtom]
end;
end;
{$ELSE}
function GlobalAddAtom; external kernel32 name ''GlobalAddAtomA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GlobalFindAtomA: Pointer;

function GlobalFindAtomA;
begin
GetProcedureAddress(_GlobalFindAtomA, kernel32, ''GlobalFindAtomA'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalFindAtomA]
end;
end;
{$ELSE}
function GlobalFindAtomA; external kernel32 name ''GlobalFindAtomA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalFindAtomW: Pointer;

function GlobalFindAtomW;
begin
GetProcedureAddress(_GlobalFindAtomW, kernel32, ''GlobalFindAtomW'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalFindAtomW]
end;
end;
{$ELSE}
function GlobalFindAtomW; external kernel32 name ''GlobalFindAtomW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GlobalFindAtom: Pointer;



function GlobalFindAtom;
begin
GetProcedureAddress(_GlobalFindAtom, kernel32, ''GlobalFindAtomW'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalFindAtom]
end;
end;
{$ELSE}
function GlobalFindAtom; external kernel32 name ''GlobalFindAtomW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GlobalFindAtom: Pointer;

function GlobalFindAtom;
begin
GetProcedureAddress(_GlobalFindAtom, kernel32, ''GlobalFindAtomA'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalFindAtom]
end;
end;
{$ELSE}
function GlobalFindAtom; external kernel32 name ''GlobalFindAtomA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GlobalGetAtomNameA: Pointer;

function GlobalGetAtomNameA;
begin
GetProcedureAddress(_GlobalGetAtomNameA, kernel32, ''GlobalGetAtomNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalGetAtomNameA]
end;
end;

{$ELSE}
function GlobalGetAtomNameA; external kernel32 name ''GlobalGetAtomNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GlobalGetAtomNameW: Pointer;

function GlobalGetAtomNameW;
begin
GetProcedureAddress(_GlobalGetAtomNameW, kernel32, ''GlobalGetAtomNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalGetAtomNameW]
end;
end;
{$ELSE}
function GlobalGetAtomNameW; external kernel32 name ''GlobalGetAtomNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GlobalGetAtomName: Pointer;

function GlobalGetAtomName;
begin
GetProcedureAddress(_GlobalGetAtomName, kernel32, ''GlobalGetAtomNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalGetAtomName]
end;
end;
{$ELSE}
function GlobalGetAtomName; external kernel32 name ''GlobalGetAtomNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GlobalGetAtomName: Pointer;



function GlobalGetAtomName;
begin
GetProcedureAddress(_GlobalGetAtomName, kernel32, ''GlobalGetAtomNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GlobalGetAtomName]
end;
end;
{$ELSE}
function GlobalGetAtomName; external kernel32 name ''GlobalGetAtomNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AddAtomA: Pointer;

function AddAtomA;
begin
GetProcedureAddress(_AddAtomA, kernel32, ''AddAtomA'');
asm
mov esp, ebp
pop ebp
jmp [_AddAtomA]
end;
end;
{$ELSE}
function AddAtomA; external kernel32 name ''AddAtomA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAtomW: Pointer;

function AddAtomW;
begin
GetProcedureAddress(_AddAtomW, kernel32, ''AddAtomW'');
asm
mov esp, ebp
pop ebp
jmp [_AddAtomW]
end;
end;
{$ELSE}
function AddAtomW; external kernel32 name ''AddAtomW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_AddAtom: Pointer;

function AddAtom;
begin
GetProcedureAddress(_AddAtom, kernel32, ''AddAtomW'');
asm
mov esp, ebp
pop ebp
jmp [_AddAtom]
end;
end;
{$ELSE}
function AddAtom; external kernel32 name ''AddAtomW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_AddAtom: Pointer;

function AddAtom;
begin
GetProcedureAddress(_AddAtom, kernel32, ''AddAtomA'');
asm
mov esp, ebp
pop ebp
jmp [_AddAtom]
end;
end;
{$ELSE}
function AddAtom; external kernel32 name ''AddAtomA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindAtomA: Pointer;

function FindAtomA;
begin
GetProcedureAddress(_FindAtomA, kernel32, ''FindAtomA'');
asm
mov esp, ebp
pop ebp
jmp [_FindAtomA]
end;
end;
{$ELSE}
function FindAtomA; external kernel32 name ''FindAtomA'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindAtomW: Pointer;

function FindAtomW;
begin
GetProcedureAddress(_FindAtomW, kernel32, ''FindAtomW'');
asm
mov esp, ebp
pop ebp
jmp [_FindAtomW]
end;
end;
{$ELSE}
function FindAtomW; external kernel32 name ''FindAtomW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindAtom: Pointer;

function FindAtom;
begin
GetProcedureAddress(_FindAtom, kernel32, ''FindAtomW'');
asm
mov esp, ebp
pop ebp
jmp [_FindAtom]
end;
end;
{$ELSE}
function FindAtom; external kernel32 name ''FindAtomW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindAtom: Pointer;

function FindAtom;
begin
GetProcedureAddress(_FindAtom, kernel32, ''FindAtomA'');
asm
mov esp, ebp
pop ebp
jmp [_FindAtom]
end;
end;
{$ELSE}
function FindAtom; external kernel32 name ''FindAtomA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetAtomNameA: Pointer;

function GetAtomNameA;
begin
GetProcedureAddress(_GetAtomNameA, kernel32, ''GetAtomNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetAtomNameA]
end;
end;
{$ELSE}
function GetAtomNameA; external kernel32 name ''GetAtomNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetAtomNameW: Pointer;

function GetAtomNameW;
begin
GetProcedureAddress(_GetAtomNameW, kernel32, ''GetAtomNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetAtomNameW]
end;
end;
{$ELSE}
function GetAtomNameW; external kernel32 name ''GetAtomNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetAtomName: Pointer;

function GetAtomName;
begin
GetProcedureAddress(_GetAtomName, kernel32, ''GetAtomNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetAtomName]
end;
end;
{$ELSE}
function GetAtomName; external kernel32 name ''GetAtomNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetAtomName: Pointer;

function GetAtomName;
begin
GetProcedureAddress(_GetAtomName, kernel32, ''GetAtomNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetAtomName]
end;
end;
{$ELSE}
function GetAtomName; external kernel32 name ''GetAtomNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileIntA: Pointer;

function GetProfileIntA;
begin
GetProcedureAddress(_GetProfileIntA, kernel32, ''GetProfileIntA'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileIntA]
end;
end;
{$ELSE}
function GetProfileIntA; external kernel32 name ''GetProfileIntA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileIntW: Pointer;

function GetProfileIntW;
begin
GetProcedureAddress(_GetProfileIntW, kernel32, ''GetProfileIntW'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileIntW]
end;
end;
{$ELSE}
function GetProfileIntW; external kernel32 name ''GetProfileIntW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileInt: Pointer;

function GetProfileInt;
begin
GetProcedureAddress(_GetProfileInt, kernel32, ''GetProfileIntW'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileInt]
end;
end;
{$ELSE}
function GetProfileInt; external kernel32 name ''GetProfileIntW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileInt: Pointer;

function GetProfileInt;
begin
GetProcedureAddress(_GetProfileInt, kernel32, ''GetProfileIntA'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileInt]
end;
end;
{$ELSE}
function GetProfileInt; external kernel32 name ''GetProfileIntA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileStringA: Pointer;

function GetProfileStringA;
begin
GetProcedureAddress(_GetProfileStringA, kernel32, ''GetProfileStringA'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileStringA]
end;
end;
{$ELSE}
function GetProfileStringA; external kernel32 name ''GetProfileStringA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileStringW: Pointer;

function GetProfileStringW;
begin
GetProcedureAddress(_GetProfileStringW, kernel32, ''GetProfileStringW'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileStringW]
end;
end;
{$ELSE}
function GetProfileStringW; external kernel32 name ''GetProfileStringW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileString: Pointer;

function GetProfileString;
begin
GetProcedureAddress(_GetProfileString, kernel32, ''GetProfileStringW'');
asm
mov esp, ebp


pop ebp
jmp [_GetProfileString]
end;
end;
{$ELSE}
function GetProfileString; external kernel32 name ''GetProfileStringW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileString: Pointer;

function GetProfileString;
begin
GetProcedureAddress(_GetProfileString, kernel32, ''GetProfileStringA'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileString]
end;
end;
{$ELSE}
function GetProfileString; external kernel32 name ''GetProfileStringA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_WriteProfileStringA: Pointer;

function WriteProfileStringA;
begin
GetProcedureAddress(_WriteProfileStringA, kernel32, ''WriteProfileStringA'');
asm
mov esp, ebp
pop ebp
jmp [_WriteProfileStringA]
end;
end;
{$ELSE}
function WriteProfileStringA; external kernel32 name ''WriteProfileStringA'';
{$ENDIF DYNAMIC_LINK}



{$IFDEF DYNAMIC_LINK}
var
_WriteProfileStringW: Pointer;

function WriteProfileStringW;
begin
GetProcedureAddress(_WriteProfileStringW, kernel32, ''WriteProfileStringW'');
asm
mov esp, ebp
pop ebp
jmp [_WriteProfileStringW]
end;
end;
{$ELSE}
function WriteProfileStringW; external kernel32 name ''WriteProfileStringW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_WriteProfileString: Pointer;

function WriteProfileString;
begin
GetProcedureAddress(_WriteProfileString, kernel32, ''WriteProfileStringW'');
asm
mov esp, ebp
pop ebp
jmp [_WriteProfileString]
end;
end;
{$ELSE}
function WriteProfileString; external kernel32 name ''WriteProfileStringW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_WriteProfileString: Pointer;

function WriteProfileString;
begin
GetProcedureAddress(_WriteProfileString, kernel32, ''WriteProfileStringA'');
asm
mov esp, ebp
pop ebp
jmp [_WriteProfileString]
end;
end;
{$ELSE}
function WriteProfileString; external kernel32 name ''WriteProfileStringA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileSectionA: Pointer;

function GetProfileSectionA;
begin
GetProcedureAddress(_GetProfileSectionA, kernel32, ''GetProfileSectionA'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileSectionA]
end;
end;
{$ELSE}
function GetProfileSectionA; external kernel32 name ''GetProfileSectionA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileSectionW: Pointer;

function GetProfileSectionW;
begin
GetProcedureAddress(_GetProfileSectionW, kernel32, ''GetProfileSectionW'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileSectionW]
end;
end;
{$ELSE}
function GetProfileSectionW; external kernel32 name ''GetProfileSectionW'';


{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileSection: Pointer;

function GetProfileSection;
begin
GetProcedureAddress(_GetProfileSection, kernel32, ''GetProfileSectionW'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileSection]
end;
end;
{$ELSE}
function GetProfileSection; external kernel32 name ''GetProfileSectionW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetProfileSection: Pointer;

function GetProfileSection;
begin
GetProcedureAddress(_GetProfileSection, kernel32, ''GetProfileSectionA'');
asm
mov esp, ebp
pop ebp
jmp [_GetProfileSection]
end;
end;
{$ELSE}
function GetProfileSection; external kernel32 name ''GetProfileSectionA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_WriteProfileSectionA: Pointer;

function WriteProfileSectionA;
begin
GetProcedureAddress(_WriteProfileSectionA, kernel32, ''WriteProfileSectionA'');
asm
mov esp, ebp
pop ebp
jmp [_WriteProfileSectionA]
end;
end;
{$ELSE}
function WriteProfileSectionA; external kernel32 name ''WriteProfileSectionA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WriteProfileSectionW: Pointer;

function WriteProfileSectionW;
begin
GetProcedureAddress(_WriteProfileSectionW, kernel32, ''WriteProfileSectionW'');
asm
mov esp, ebp
pop ebp
jmp [_WriteProfileSectionW]
end;
end;
{$ELSE}
function WriteProfileSectionW; external kernel32 name ''WriteProfileSectionW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_WriteProfileSection: Pointer;

function WriteProfileSection;
begin
GetProcedureAddress(_WriteProfileSection, kernel32, ''WriteProfileSectionW'');
asm
mov esp, ebp
pop ebp
jmp [_WriteProfileSection]
end;
end;
{$ELSE}
function WriteProfileSection; external kernel32 name ''WriteProfileSectionW'';


{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_WriteProfileSection: Pointer;

function WriteProfileSection;
begin
GetProcedureAddress(_WriteProfileSection, kernel32, ''WriteProfileSectionA'');
asm
mov esp, ebp
pop ebp
jmp [_WriteProfileSection]
end;
end;
{$ELSE}
function WriteProfileSection; external kernel32 name ''WriteProfileSectionA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileIntA: Pointer;

function GetPrivateProfileIntA;
begin
GetProcedureAddress(_GetPrivateProfileIntA, kernel32, ''GetPrivateProfileIntA'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileIntA]
end;
end;
{$ELSE}
function GetPrivateProfileIntA; external kernel32 name ''GetPrivateProfileIntA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileIntW: Pointer;

function GetPrivateProfileIntW;
begin


GetProcedureAddress(_GetPrivateProfileIntW, kernel32, ''GetPrivateProfileIntW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileIntW]
end;
end;
{$ELSE}
function GetPrivateProfileIntW; external kernel32 name ''GetPrivateProfileIntW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileInt: Pointer;

function GetPrivateProfileInt;
begin
GetProcedureAddress(_GetPrivateProfileInt, kernel32, ''GetPrivateProfileIntW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileInt]
end;
end;
{$ELSE}
function GetPrivateProfileInt; external kernel32 name ''GetPrivateProfileIntW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileInt: Pointer;

function GetPrivateProfileInt;
begin
GetProcedureAddress(_GetPrivateProfileInt, kernel32, ''GetPrivateProfileIntA'');
asm
mov esp, ebp
pop ebp


jmp [_GetPrivateProfileInt]
end;
end;
{$ELSE}
function GetPrivateProfileInt; external kernel32 name ''GetPrivateProfileIntA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileStringA: Pointer;

function GetPrivateProfileStringA;
begin
GetProcedureAddress(_GetPrivateProfileStringA, kernel32, ''GetPrivateProfileStringA'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileStringA]
end;
end;
{$ELSE}
function GetPrivateProfileStringA; external kernel32 name ''GetPrivateProfileStringA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileStringW: Pointer;

function GetPrivateProfileStringW;
begin
GetProcedureAddress(_GetPrivateProfileStringW, kernel32, ''GetPrivateProfileStringW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileStringW]
end;
end;
{$ELSE}
function GetPrivateProfileStringW; external kernel32 name ''GetPrivateProfileStringW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileString: Pointer;

function GetPrivateProfileString;
begin
GetProcedureAddress(_GetPrivateProfileString, kernel32, ''GetPrivateProfileStringW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileString]
end;
end;
{$ELSE}
function GetPrivateProfileString; external kernel32 name ''GetPrivateProfileStringW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileString: Pointer;

function GetPrivateProfileString;
begin
GetProcedureAddress(_GetPrivateProfileString, kernel32, ''GetPrivateProfileStringA'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileString]
end;
end;
{$ELSE}
function GetPrivateProfileString; external kernel32 name ''GetPrivateProfileStringA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileStringA: Pointer;

function WritePrivateProfileStringA;
begin
GetProcedureAddress(_WritePrivateProfileStringA, kernel32, ''WritePrivateProfileStringA'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileStringA]
end;
end;
{$ELSE}
function WritePrivateProfileStringA; external kernel32 name ''WritePrivateProfileStringA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileStringW: Pointer;

function WritePrivateProfileStringW;
begin
GetProcedureAddress(_WritePrivateProfileStringW, kernel32, ''WritePrivateProfileStringW'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileStringW]
end;
end;
{$ELSE}
function WritePrivateProfileStringW; external kernel32 name ''WritePrivateProfileStringW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileString: Pointer;

function WritePrivateProfileString;
begin
GetProcedureAddress(_WritePrivateProfileString, kernel32, ''WritePrivateProfileStringW'');

asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileString]
end;
end;
{$ELSE}
function WritePrivateProfileString; external kernel32 name ''WritePrivateProfileStringW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileString: Pointer;

function WritePrivateProfileString;
begin
GetProcedureAddress(_WritePrivateProfileString, kernel32, ''WritePrivateProfileStringA'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileString]
end;
end;
{$ELSE}
function WritePrivateProfileString; external kernel32 name ''WritePrivateProfileStringA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileSectionA: Pointer;

function GetPrivateProfileSectionA;
begin
GetProcedureAddress(_GetPrivateProfileSectionA, kernel32, ''GetPrivateProfileSectionA'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileSectionA]
end;
end;
{$ELSE}
function GetPrivateProfileSectionA; external kernel32 name ''GetPrivateProfileSectionA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileSectionW: Pointer;

function GetPrivateProfileSectionW;
begin
GetProcedureAddress(_GetPrivateProfileSectionW, kernel32, ''GetPrivateProfileSectionW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileSectionW]
end;
end;
{$ELSE}
function GetPrivateProfileSectionW; external kernel32 name ''GetPrivateProfileSectionW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileSection: Pointer;

function GetPrivateProfileSection;
begin
GetProcedureAddress(_GetPrivateProfileSection, kernel32, ''GetPrivateProfileSectionW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileSection]
end;
end;
{$ELSE}
function GetPrivateProfileSection; external kernel32 name ''GetPrivateProfileSectionW'';


{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileSection: Pointer;

function GetPrivateProfileSection;
begin
GetProcedureAddress(_GetPrivateProfileSection, kernel32, ''GetPrivateProfileSectionA'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileSection]
end;
end;
{$ELSE}
function GetPrivateProfileSection; external kernel32 name ''GetPrivateProfileSectionA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileSectionA: Pointer;

function WritePrivateProfileSectionA;
begin
GetProcedureAddress(_WritePrivateProfileSectionA, kernel32, ''WritePrivateProfileSectionA'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileSectionA]
end;
end;
{$ELSE}
function WritePrivateProfileSectionA; external kernel32 name ''WritePrivateProfileSectionA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileSectionW: Pointer;


function WritePrivateProfileSectionW;
begin
GetProcedureAddress(_WritePrivateProfileSectionW, kernel32, ''WritePrivateProfileSectionW'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileSectionW]
end;
end;
{$ELSE}
function WritePrivateProfileSectionW; external kernel32 name ''WritePrivateProfileSectionW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileSection: Pointer;

function WritePrivateProfileSection;
begin
GetProcedureAddress(_WritePrivateProfileSection, kernel32, ''WritePrivateProfileSectionW'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileSection]
end;
end;
{$ELSE}
function WritePrivateProfileSection; external kernel32 name ''WritePrivateProfileSectionW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileSection: Pointer;

function WritePrivateProfileSection;
begin
GetProcedureAddress(_WritePrivateProfileSection, kernel32, ''WritePrivateProfileSectionA'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileSection]
end;
end;
{$ELSE}
function WritePrivateProfileSection; external kernel32 name ''WritePrivateProfileSectionA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileSectionNamesA: Pointer;

function GetPrivateProfileSectionNamesA;
begin
GetProcedureAddress(_GetPrivateProfileSectionNamesA, kernel32, ''GetPrivateProfileSectionNamesA'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileSectionNamesA]
end;
end;
{$ELSE}
function GetPrivateProfileSectionNamesA; external kernel32 name ''GetPrivateProfileSectionNamesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileSectionNamesW: Pointer;

function GetPrivateProfileSectionNamesW;
begin
GetProcedureAddress(_GetPrivateProfileSectionNamesW, kernel32, ''GetPrivateProfileSectionNamesW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileSectionNamesW]
end;
end;
{$ELSE}
function GetPrivateProfileSectionNamesW; external kernel32 name ''GetPrivateProfileSectionNamesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileSectionNames: Pointer;

function GetPrivateProfileSectionNames;
begin
GetProcedureAddress(_GetPrivateProfileSectionNames, kernel32, ''GetPrivateProfileSectionNamesW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileSectionNames]
end;
end;
{$ELSE}
function GetPrivateProfileSectionNames; external kernel32 name ''GetPrivateProfileSectionNamesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileSectionNames: Pointer;

function GetPrivateProfileSectionNames;
begin
GetProcedureAddress(_GetPrivateProfileSectionNames, kernel32, ''GetPrivateProfileSectionNamesA'');
asm

mov esp, ebp
pop ebp
jmp [_GetPrivateProfileSectionNames]
end;
end;
{$ELSE}
function GetPrivateProfileSectionNames; external kernel32 name ''GetPrivateProfileSectionNamesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileStructA: Pointer;

function GetPrivateProfileStructA;
begin
GetProcedureAddress(_GetPrivateProfileStructA, kernel32, ''GetPrivateProfileStructA'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileStructA]
end;
end;
{$ELSE}
function GetPrivateProfileStructA; external kernel32 name ''GetPrivateProfileStructA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileStructW: Pointer;

function GetPrivateProfileStructW;
begin
GetProcedureAddress(_GetPrivateProfileStructW, kernel32, ''GetPrivateProfileStructW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileStructW]
end;


end;
{$ELSE}
function GetPrivateProfileStructW; external kernel32 name ''GetPrivateProfileStructW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileStruct: Pointer;

function GetPrivateProfileStruct;
begin
GetProcedureAddress(_GetPrivateProfileStruct, kernel32, ''GetPrivateProfileStructW'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileStruct]
end;
end;
{$ELSE}
function GetPrivateProfileStruct; external kernel32 name ''GetPrivateProfileStructW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateProfileStruct: Pointer;

function GetPrivateProfileStruct;
begin
GetProcedureAddress(_GetPrivateProfileStruct, kernel32, ''GetPrivateProfileStructA'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateProfileStruct]
end;
end;
{$ELSE}
function GetPrivateProfileStruct; external kernel32 name ''GetPrivateProfileStructA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileStructA: Pointer;

function WritePrivateProfileStructA;
begin
GetProcedureAddress(_WritePrivateProfileStructA, kernel32, ''WritePrivateProfileStructA'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileStructA]
end;
end;
{$ELSE}
function WritePrivateProfileStructA; external kernel32 name ''WritePrivateProfileStructA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileStructW: Pointer;

function WritePrivateProfileStructW;
begin
GetProcedureAddress(_WritePrivateProfileStructW, kernel32, ''WritePrivateProfileStructW'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileStructW]
end;
end;
{$ELSE}
function WritePrivateProfileStructW; external kernel32 name ''WritePrivateProfileStructW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileStruct: Pointer;

function WritePrivateProfileStruct;
begin
GetProcedureAddress(_WritePrivateProfileStruct, kernel32, ''WritePrivateProfileStructW'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileStruct]
end;
end;
{$ELSE}
function WritePrivateProfileStruct; external kernel32 name ''WritePrivateProfileStructW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_WritePrivateProfileStruct: Pointer;

function WritePrivateProfileStruct;
begin
GetProcedureAddress(_WritePrivateProfileStruct, kernel32, ''WritePrivateProfileStructA'');
asm
mov esp, ebp
pop ebp
jmp [_WritePrivateProfileStruct]
end;
end;
{$ELSE}
function WritePrivateProfileStruct; external kernel32 name ''WritePrivateProfileStructA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetDriveTypeA: Pointer;

function GetDriveTypeA;
begin


GetProcedureAddress(_GetDriveTypeA, kernel32, ''GetDriveTypeA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDriveTypeA]
end;
end;
{$ELSE}
function GetDriveTypeA; external kernel32 name ''GetDriveTypeA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDriveTypeW: Pointer;

function GetDriveTypeW;
begin
GetProcedureAddress(_GetDriveTypeW, kernel32, ''GetDriveTypeW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDriveTypeW]
end;
end;
{$ELSE}
function GetDriveTypeW; external kernel32 name ''GetDriveTypeW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetDriveType: Pointer;

function GetDriveType;
begin
GetProcedureAddress(_GetDriveType, kernel32, ''GetDriveTypeW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDriveType]
end;
end;
{$ELSE}
function GetDriveType; external kernel32 name ''GetDriveTypeW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetDriveType: Pointer;

function GetDriveType;
begin
GetProcedureAddress(_GetDriveType, kernel32, ''GetDriveTypeA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDriveType]
end;
end;
{$ELSE}
function GetDriveType; external kernel32 name ''GetDriveTypeA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemDirectoryA: Pointer;

function GetSystemDirectoryA;
begin
GetProcedureAddress(_GetSystemDirectoryA, kernel32, ''GetSystemDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemDirectoryA]
end;
end;
{$ELSE}
function GetSystemDirectoryA; external kernel32 name ''GetSystemDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemDirectoryW: Pointer;

function GetSystemDirectoryW;
begin
GetProcedureAddress(_GetSystemDirectoryW, kernel32, ''GetSystemDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemDirectoryW]
end;
end;
{$ELSE}
function GetSystemDirectoryW; external kernel32 name ''GetSystemDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemDirectory: Pointer;

function GetSystemDirectory;
begin
GetProcedureAddress(_GetSystemDirectory, kernel32, ''GetSystemDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemDirectory]
end;
end;
{$ELSE}
function GetSystemDirectory; external kernel32 name ''GetSystemDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemDirectory: Pointer;

function GetSystemDirectory;
begin
GetProcedureAddress(_GetSystemDirectory, kernel32, ''GetSystemDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemDirectory]
end;
end;
{$ELSE}
function GetSystemDirectory; external kernel32 name ''GetSystemDirectoryA'';


{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetTempPathA: Pointer;

function GetTempPathA;
begin
GetProcedureAddress(_GetTempPathA, kernel32, ''GetTempPathA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTempPathA]
end;
end;
{$ELSE}
function GetTempPathA; external kernel32 name ''GetTempPathA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTempPathW: Pointer;

function GetTempPathW;
begin
GetProcedureAddress(_GetTempPathW, kernel32, ''GetTempPathW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTempPathW]
end;
end;
{$ELSE}
function GetTempPathW; external kernel32 name ''GetTempPathW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetTempPath: Pointer;

function GetTempPath;
begin
GetProcedureAddress(_GetTempPath, kernel32, ''GetTempPathW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTempPath]
end;
end;
{$ELSE}
function GetTempPath; external kernel32 name ''GetTempPathW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetTempPath: Pointer;

function GetTempPath;
begin
GetProcedureAddress(_GetTempPath, kernel32, ''GetTempPathA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTempPath]
end;
end;
{$ELSE}
function GetTempPath; external kernel32 name ''GetTempPathA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetTempFileNameA: Pointer;

function GetTempFileNameA;
begin
GetProcedureAddress(_GetTempFileNameA, kernel32, ''GetTempFileNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTempFileNameA]
end;
end;
{$ELSE}
function GetTempFileNameA; external kernel32 name ''GetTempFileNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTempFileNameW: Pointer;

function GetTempFileNameW;
begin


GetProcedureAddress(_GetTempFileNameW, kernel32, ''GetTempFileNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTempFileNameW]
end;
end;
{$ELSE}
function GetTempFileNameW; external kernel32 name ''GetTempFileNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetTempFileName: Pointer;

function GetTempFileName;
begin
GetProcedureAddress(_GetTempFileName, kernel32, ''GetTempFileNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTempFileName]
end;
end;
{$ELSE}
function GetTempFileName; external kernel32 name ''GetTempFileNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetTempFileName: Pointer;

function GetTempFileName;
begin
GetProcedureAddress(_GetTempFileName, kernel32, ''GetTempFileNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTempFileName]
end;
end;
{$ELSE}
function GetTempFileName; external kernel32 name ''GetTempFileNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetWindowsDirectoryA: Pointer;

function GetWindowsDirectoryA;
begin
GetProcedureAddress(_GetWindowsDirectoryA, kernel32, ''GetWindowsDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetWindowsDirectoryA]
end;
end;
{$ELSE}
function GetWindowsDirectoryA; external kernel32 name ''GetWindowsDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetWindowsDirectoryW: Pointer;

function GetWindowsDirectoryW;
begin
GetProcedureAddress(_GetWindowsDirectoryW, kernel32, ''GetWindowsDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetWindowsDirectoryW]
end;
end;
{$ELSE}
function GetWindowsDirectoryW; external kernel32 name ''GetWindowsDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetWindowsDirectory: Pointer;

function GetWindowsDirectory;
begin


GetProcedureAddress(_GetWindowsDirectory, kernel32, ''GetWindowsDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetWindowsDirectory]
end;
end;
{$ELSE}
function GetWindowsDirectory; external kernel32 name ''GetWindowsDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetWindowsDirectory: Pointer;

function GetWindowsDirectory;
begin
GetProcedureAddress(_GetWindowsDirectory, kernel32, ''GetWindowsDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetWindowsDirectory]
end;
end;
{$ELSE}
function GetWindowsDirectory; external kernel32 name ''GetWindowsDirectoryA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemWindowsDirectoryA: Pointer;

function GetSystemWindowsDirectoryA;
begin
GetProcedureAddress(_GetSystemWindowsDirectoryA, kernel32, ''GetSystemWindowsDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemWindowsDirectoryA]
end;
end;
{$ELSE}
function GetSystemWindowsDirectoryA; external kernel32 name ''GetSystemWindowsDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemWindowsDirectoryW: Pointer;

function GetSystemWindowsDirectoryW;
begin
GetProcedureAddress(_GetSystemWindowsDirectoryW, kernel32, ''GetSystemWindowsDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemWindowsDirectoryW]
end;
end;
{$ELSE}
function GetSystemWindowsDirectoryW; external kernel32 name ''GetSystemWindowsDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemWindowsDirectory: Pointer;

function GetSystemWindowsDirectory;
begin
GetProcedureAddress(_GetSystemWindowsDirectory, kernel32, ''GetSystemWindowsDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemWindowsDirectory]
end;
end;
{$ELSE}
function GetSystemWindowsDirectory; external kernel32 name ''GetSystemWindowsDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemWindowsDirectory: Pointer;

function GetSystemWindowsDirectory;
begin
GetProcedureAddress(_GetSystemWindowsDirectory, kernel32, ''GetSystemWindowsDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemWindowsDirectory]
end;
end;
{$ELSE}
function GetSystemWindowsDirectory; external kernel32 name ''GetSystemWindowsDirectoryA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemWow64DirectoryA: Pointer;

function GetSystemWow64DirectoryA;
begin
GetProcedureAddress(_GetSystemWow64DirectoryA, kernel32, ''GetSystemWow64DirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemWow64DirectoryA]
end;
end;
{$ELSE}
function GetSystemWow64DirectoryA; external kernel32 name ''GetSystemWow64DirectoryA'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemWow64DirectoryW: Pointer;

function GetSystemWow64DirectoryW;
begin
GetProcedureAddress(_GetSystemWow64DirectoryW, kernel32, ''GetSystemWow64DirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemWow64DirectoryW]
end;
end;
{$ELSE}
function GetSystemWow64DirectoryW; external kernel32 name ''GetSystemWow64DirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemWow64Directory: Pointer;

function GetSystemWow64Directory;
begin
GetProcedureAddress(_GetSystemWow64Directory, kernel32, ''GetSystemWow64DirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemWow64Directory]
end;
end;
{$ELSE}
function GetSystemWow64Directory; external kernel32 name ''GetSystemWow64DirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemWow64Directory: Pointer;

function GetSystemWow64Directory;
begin
GetProcedureAddress(_GetSystemWow64Directory, kernel32, ''GetSystemWow64DirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemWow64Directory]
end;
end;
{$ELSE}
function GetSystemWow64Directory; external kernel32 name ''GetSystemWow64DirectoryA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetCurrentDirectoryA: Pointer;

function SetCurrentDirectoryA;
begin
GetProcedureAddress(_SetCurrentDirectoryA, kernel32, ''SetCurrentDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_SetCurrentDirectoryA]
end;
end;
{$ELSE}
function SetCurrentDirectoryA; external kernel32 name ''SetCurrentDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetCurrentDirectoryW: Pointer;

function SetCurrentDirectoryW;
begin
GetProcedureAddress(_SetCurrentDirectoryW, kernel32, ''SetCurrentDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_SetCurrentDirectoryW]
end;
end;
{$ELSE}
function SetCurrentDirectoryW; external kernel32 name ''SetCurrentDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetCurrentDirectory: Pointer;

function SetCurrentDirectory;
begin
GetProcedureAddress(_SetCurrentDirectory, kernel32, ''SetCurrentDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_SetCurrentDirectory]
end;
end;
{$ELSE}
function SetCurrentDirectory; external kernel32 name ''SetCurrentDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetCurrentDirectory: Pointer;

function SetCurrentDirectory;
begin
GetProcedureAddress(_SetCurrentDirectory, kernel32, ''SetCurrentDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_SetCurrentDirectory]
end;
end;
{$ELSE}
function SetCurrentDirectory; external kernel32 name ''SetCurrentDirectoryA'';

{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentDirectoryA: Pointer;

function GetCurrentDirectoryA;
begin
GetProcedureAddress(_GetCurrentDirectoryA, kernel32, ''GetCurrentDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentDirectoryA]
end;
end;
{$ELSE}
function GetCurrentDirectoryA; external kernel32 name ''GetCurrentDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentDirectoryW: Pointer;

function GetCurrentDirectoryW;
begin
GetProcedureAddress(_GetCurrentDirectoryW, kernel32, ''GetCurrentDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentDirectoryW]
end;
end;
{$ELSE}
function GetCurrentDirectoryW; external kernel32 name ''GetCurrentDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentDirectory: Pointer;

function GetCurrentDirectory;
begin

GetProcedureAddress(_GetCurrentDirectory, kernel32, ''GetCurrentDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentDirectory]
end;
end;
{$ELSE}
function GetCurrentDirectory; external kernel32 name ''GetCurrentDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentDirectory: Pointer;

function GetCurrentDirectory;
begin
GetProcedureAddress(_GetCurrentDirectory, kernel32, ''GetCurrentDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentDirectory]
end;
end;
{$ELSE}
function GetCurrentDirectory; external kernel32 name ''GetCurrentDirectoryA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetDllDirectoryA: Pointer;

function SetDllDirectoryA;
begin
GetProcedureAddress(_SetDllDirectoryA, kernel32, ''SetDllDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_SetDllDirectoryA]
end;

end;
{$ELSE}
function SetDllDirectoryA; external kernel32 name ''SetDllDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetDllDirectoryW: Pointer;

function SetDllDirectoryW;
begin
GetProcedureAddress(_SetDllDirectoryW, kernel32, ''SetDllDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_SetDllDirectoryW]
end;
end;
{$ELSE}
function SetDllDirectoryW; external kernel32 name ''SetDllDirectoryW'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetDllDirectory: Pointer;

function SetDllDirectory;
begin
GetProcedureAddress(_SetDllDirectory, kernel32, ''SetDllDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_SetDllDirectory]
end;
end;
{$ELSE}
function SetDllDirectory; external kernel32 name ''SetDllDirectoryW'';
{$ENDIF DYNAMIC_LINK}

{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetDllDirectory: Pointer;

function SetDllDirectory;
begin
GetProcedureAddress(_SetDllDirectory, kernel32, ''SetDllDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_SetDllDirectory]
end;
end;
{$ELSE}
function SetDllDirectory; external kernel32 name ''SetDllDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetDllDirectoryA: Pointer;

function GetDllDirectoryA;
begin
GetProcedureAddress(_GetDllDirectoryA, kernel32, ''GetDllDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDllDirectoryA]
end;
end;
{$ELSE}
function GetDllDirectoryA; external kernel32 name ''GetDllDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDllDirectoryW: Pointer;

function GetDllDirectoryW;
begin
GetProcedureAddress(_GetDllDirectoryW, kernel32, ''GetDllDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDllDirectoryW]
end;
end;

{$ELSE}
function GetDllDirectoryW; external kernel32 name ''GetDllDirectoryW'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetDllDirectory: Pointer;

function GetDllDirectory;
begin
GetProcedureAddress(_GetDllDirectory, kernel32, ''GetDllDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDllDirectory]
end;
end;
{$ELSE}
function GetDllDirectory; external kernel32 name ''GetDllDirectoryW'';
{$ENDIF DYNAMIC_LINK}

{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetDllDirectory: Pointer;

function GetDllDirectory;
begin
GetProcedureAddress(_GetDllDirectory, kernel32, ''GetDllDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDllDirectory]
end;
end;
{$ELSE}
function GetDllDirectory; external kernel32 name ''GetDllDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$ENDIF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetDiskFreeSpaceA: Pointer;

function GetDiskFreeSpaceA;
begin
GetProcedureAddress(_GetDiskFreeSpaceA, kernel32, ''GetDiskFreeSpaceA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDiskFreeSpaceA]
end;
end;
{$ELSE}
function GetDiskFreeSpaceA; external kernel32 name ''GetDiskFreeSpaceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDiskFreeSpaceW: Pointer;

function GetDiskFreeSpaceW;
begin
GetProcedureAddress(_GetDiskFreeSpaceW, kernel32, ''GetDiskFreeSpaceW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDiskFreeSpaceW]
end;
end;
{$ELSE}
function GetDiskFreeSpaceW; external kernel32 name ''GetDiskFreeSpaceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetDiskFreeSpace: Pointer;

function GetDiskFreeSpace;
begin
GetProcedureAddress(_GetDiskFreeSpace, kernel32, ''GetDiskFreeSpaceW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDiskFreeSpace]


end;
end;
{$ELSE}
function GetDiskFreeSpace; external kernel32 name ''GetDiskFreeSpaceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetDiskFreeSpace: Pointer;

function GetDiskFreeSpace;
begin
GetProcedureAddress(_GetDiskFreeSpace, kernel32, ''GetDiskFreeSpaceA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDiskFreeSpace]
end;
end;
{$ELSE}
function GetDiskFreeSpace; external kernel32 name ''GetDiskFreeSpaceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetDiskFreeSpaceExA: Pointer;

function GetDiskFreeSpaceExA;
begin
GetProcedureAddress(_GetDiskFreeSpaceExA, kernel32, ''GetDiskFreeSpaceExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDiskFreeSpaceExA]
end;
end;
{$ELSE}
function GetDiskFreeSpaceExA; external kernel32 name ''GetDiskFreeSpaceExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDiskFreeSpaceExW: Pointer;


function GetDiskFreeSpaceExW;
begin
GetProcedureAddress(_GetDiskFreeSpaceExW, kernel32, ''GetDiskFreeSpaceExW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDiskFreeSpaceExW]
end;
end;
{$ELSE}
function GetDiskFreeSpaceExW; external kernel32 name ''GetDiskFreeSpaceExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetDiskFreeSpaceEx: Pointer;

function GetDiskFreeSpaceEx;
begin
GetProcedureAddress(_GetDiskFreeSpaceEx, kernel32, ''GetDiskFreeSpaceExW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDiskFreeSpaceEx]
end;
end;
{$ELSE}
function GetDiskFreeSpaceEx; external kernel32 name ''GetDiskFreeSpaceExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetDiskFreeSpaceEx: Pointer;

function GetDiskFreeSpaceEx;
begin
GetProcedureAddress(_GetDiskFreeSpaceEx, kernel32, ''GetDiskFreeSpaceExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDiskFreeSpaceEx]
end;
end;
{$ELSE}
function GetDiskFreeSpaceEx; external kernel32 name ''GetDiskFreeSpaceExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateDirectoryA: Pointer;

function CreateDirectoryA;
begin
GetProcedureAddress(_CreateDirectoryA, kernel32, ''CreateDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDirectoryA]
end;
end;
{$ELSE}
function CreateDirectoryA; external kernel32 name ''CreateDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateDirectoryW: Pointer;

function CreateDirectoryW;
begin
GetProcedureAddress(_CreateDirectoryW, kernel32, ''CreateDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDirectoryW]
end;
end;
{$ELSE}
function CreateDirectoryW; external kernel32 name ''CreateDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}

var
_CreateDirectory: Pointer;

function CreateDirectory;
begin
GetProcedureAddress(_CreateDirectory, kernel32, ''CreateDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDirectory]
end;
end;
{$ELSE}
function CreateDirectory; external kernel32 name ''CreateDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateDirectory: Pointer;

function CreateDirectory;
begin
GetProcedureAddress(_CreateDirectory, kernel32, ''CreateDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDirectory]
end;
end;
{$ELSE}
function CreateDirectory; external kernel32 name ''CreateDirectoryA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateDirectoryExA: Pointer;

function CreateDirectoryExA;
begin
GetProcedureAddress(_CreateDirectoryExA, kernel32, ''CreateDirectoryExA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDirectoryExA]
end;
end;
{$ELSE}
function CreateDirectoryExA; external kernel32 name ''CreateDirectoryExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateDirectoryExW: Pointer;

function CreateDirectoryExW;
begin
GetProcedureAddress(_CreateDirectoryExW, kernel32, ''CreateDirectoryExW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDirectoryExW]
end;
end;
{$ELSE}
function CreateDirectoryExW; external kernel32 name ''CreateDirectoryExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateDirectoryEx: Pointer;

function CreateDirectoryEx;
begin
GetProcedureAddress(_CreateDirectoryEx, kernel32, ''CreateDirectoryExW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDirectoryEx]
end;
end;
{$ELSE}
function CreateDirectoryEx; external kernel32 name ''CreateDirectoryExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateDirectoryEx: Pointer;

function CreateDirectoryEx;
begin
GetProcedureAddress(_CreateDirectoryEx, kernel32, ''CreateDirectoryExA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDirectoryEx]
end;
end;
{$ELSE}
function CreateDirectoryEx; external kernel32 name ''CreateDirectoryExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_RemoveDirectoryA: Pointer;

function RemoveDirectoryA;
begin
GetProcedureAddress(_RemoveDirectoryA, kernel32, ''RemoveDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveDirectoryA]
end;
end;
{$ELSE}
function RemoveDirectoryA; external kernel32 name ''RemoveDirectoryA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RemoveDirectoryW: Pointer;

function RemoveDirectoryW;
begin
GetProcedureAddress(_RemoveDirectoryW, kernel32, ''RemoveDirectoryW'');
asm


mov esp, ebp
pop ebp
jmp [_RemoveDirectoryW]
end;
end;
{$ELSE}
function RemoveDirectoryW; external kernel32 name ''RemoveDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_RemoveDirectory: Pointer;

function RemoveDirectory;
begin
GetProcedureAddress(_RemoveDirectory, kernel32, ''RemoveDirectoryW'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveDirectory]
end;
end;
{$ELSE}
function RemoveDirectory; external kernel32 name ''RemoveDirectoryW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_RemoveDirectory: Pointer;

function RemoveDirectory;
begin
GetProcedureAddress(_RemoveDirectory, kernel32, ''RemoveDirectoryA'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveDirectory]
end;
end;
{$ELSE}
function RemoveDirectory; external kernel32 name ''RemoveDirectoryA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}



{$IFDEF DYNAMIC_LINK}
var
_GetFullPathNameA: Pointer;

function GetFullPathNameA;
begin
GetProcedureAddress(_GetFullPathNameA, kernel32, ''GetFullPathNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFullPathNameA]
end;
end;
{$ELSE}
function GetFullPathNameA; external kernel32 name ''GetFullPathNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFullPathNameW: Pointer;

function GetFullPathNameW;
begin
GetProcedureAddress(_GetFullPathNameW, kernel32, ''GetFullPathNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFullPathNameW]
end;
end;
{$ELSE}
function GetFullPathNameW; external kernel32 name ''GetFullPathNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetFullPathName: Pointer;

function GetFullPathName;
begin
GetProcedureAddress(_GetFullPathName, kernel32, ''GetFullPathNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFullPathName]
end;
end;
{$ELSE}
function GetFullPathName; external kernel32 name ''GetFullPathNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetFullPathName: Pointer;

function GetFullPathName;
begin
GetProcedureAddress(_GetFullPathName, kernel32, ''GetFullPathNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFullPathName]
end;
end;
{$ELSE}
function GetFullPathName; external kernel32 name ''GetFullPathNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_DefineDosDeviceA: Pointer;

function DefineDosDeviceA;
begin
GetProcedureAddress(_DefineDosDeviceA, kernel32, ''DefineDosDeviceA'');
asm
mov esp, ebp
pop ebp
jmp [_DefineDosDeviceA]
end;
end;
{$ELSE}
function DefineDosDeviceA; external kernel32 name ''DefineDosDeviceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DefineDosDeviceW: Pointer;

function DefineDosDeviceW;
begin
GetProcedureAddress(_DefineDosDeviceW, kernel32, ''DefineDosDeviceW'');
asm
mov esp, ebp
pop ebp
jmp [_DefineDosDeviceW]
end;
end;
{$ELSE}
function DefineDosDeviceW; external kernel32 name ''DefineDosDeviceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_DefineDosDevice: Pointer;

function DefineDosDevice;
begin
GetProcedureAddress(_DefineDosDevice, kernel32, ''DefineDosDeviceW'');
asm
mov esp, ebp
pop ebp
jmp [_DefineDosDevice]
end;
end;
{$ELSE}
function DefineDosDevice; external kernel32 name ''DefineDosDeviceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_DefineDosDevice: Pointer;

function DefineDosDevice;
begin
GetProcedureAddress(_DefineDosDevice, kernel32, ''DefineDosDeviceA'');
asm
mov esp, ebp
pop ebp
jmp [_DefineDosDevice]
end;
end;
{$ELSE}
function DefineDosDevice; external kernel32 name ''DefineDosDeviceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_QueryDosDeviceA: Pointer;

function QueryDosDeviceA;
begin
GetProcedureAddress(_QueryDosDeviceA, kernel32, ''QueryDosDeviceA'');
asm
mov esp, ebp
pop ebp
jmp [_QueryDosDeviceA]
end;
end;
{$ELSE}
function QueryDosDeviceA; external kernel32 name ''QueryDosDeviceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_QueryDosDeviceW: Pointer;

function QueryDosDeviceW;
begin
GetProcedureAddress(_QueryDosDeviceW, kernel32, ''QueryDosDeviceW'');
asm
mov esp, ebp
pop ebp
jmp [_QueryDosDeviceW]
end;
end;
{$ELSE}
function QueryDosDeviceW; external kernel32 name ''QueryDosDeviceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_QueryDosDevice: Pointer;

function QueryDosDevice;
begin
GetProcedureAddress(_QueryDosDevice, kernel32, ''QueryDosDeviceW'');
asm
mov esp, ebp
pop ebp
jmp [_QueryDosDevice]
end;
end;
{$ELSE}
function QueryDosDevice; external kernel32 name ''QueryDosDeviceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_QueryDosDevice: Pointer;

function QueryDosDevice;
begin
GetProcedureAddress(_QueryDosDevice, kernel32, ''QueryDosDeviceA'');
asm
mov esp, ebp
pop ebp
jmp [_QueryDosDevice]
end;
end;
{$ELSE}
function QueryDosDevice; external kernel32 name ''QueryDosDeviceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateFileA: Pointer;

function CreateFileA;
begin
GetProcedureAddress(_CreateFileA, kernel32, ''CreateFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFileA]
end;
end;
{$ELSE}
function CreateFileA; external kernel32 name ''CreateFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFileW: Pointer;

function CreateFileW;
begin
GetProcedureAddress(_CreateFileW, kernel32, ''CreateFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFileW]
end;
end;
{$ELSE}
function CreateFileW; external kernel32 name ''CreateFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFile: Pointer;

function CreateFile;
begin
GetProcedureAddress(_CreateFile, kernel32, ''CreateFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFile]
end;
end;
{$ELSE}
function CreateFile; external kernel32 name ''CreateFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFile: Pointer;

function CreateFile;
begin
GetProcedureAddress(_CreateFile, kernel32, ''CreateFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFile]
end;

end;
{$ELSE}
function CreateFile; external kernel32 name ''CreateFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetFileAttributesA: Pointer;

function SetFileAttributesA;
begin
GetProcedureAddress(_SetFileAttributesA, kernel32, ''SetFileAttributesA'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileAttributesA]
end;
end;
{$ELSE}
function SetFileAttributesA; external kernel32 name ''SetFileAttributesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFileAttributesW: Pointer;

function SetFileAttributesW;
begin
GetProcedureAddress(_SetFileAttributesW, kernel32, ''SetFileAttributesW'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileAttributesW]
end;
end;
{$ELSE}
function SetFileAttributesW; external kernel32 name ''SetFileAttributesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetFileAttributes: Pointer;

function SetFileAttributes;
begin
GetProcedureAddress(_SetFileAttributes, kernel32, ''SetFileAttributesW'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileAttributes]
end;
end;
{$ELSE}
function SetFileAttributes; external kernel32 name ''SetFileAttributesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetFileAttributes: Pointer;

function SetFileAttributes;
begin
GetProcedureAddress(_SetFileAttributes, kernel32, ''SetFileAttributesA'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileAttributes]
end;
end;
{$ELSE}
function SetFileAttributes; external kernel32 name ''SetFileAttributesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetFileAttributesA: Pointer;

function GetFileAttributesA;
begin
GetProcedureAddress(_GetFileAttributesA, kernel32, ''GetFileAttributesA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileAttributesA]
end;
end;
{$ELSE}
function GetFileAttributesA; external kernel32 name ''GetFileAttributesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFileAttributesW: Pointer;

function GetFileAttributesW;
begin
GetProcedureAddress(_GetFileAttributesW, kernel32, ''GetFileAttributesW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileAttributesW]
end;
end;
{$ELSE}
function GetFileAttributesW; external kernel32 name ''GetFileAttributesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetFileAttributes: Pointer;

function GetFileAttributes;
begin
GetProcedureAddress(_GetFileAttributes, kernel32, ''GetFileAttributesW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileAttributes]
end;
end;
{$ELSE}
function GetFileAttributes; external kernel32 name ''GetFileAttributesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var

_GetFileAttributes: Pointer;

function GetFileAttributes;
begin
GetProcedureAddress(_GetFileAttributes, kernel32, ''GetFileAttributesA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileAttributes]
end;
end;
{$ELSE}
function GetFileAttributes; external kernel32 name ''GetFileAttributesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetFileAttributesExA: Pointer;

function GetFileAttributesExA;
begin
GetProcedureAddress(_GetFileAttributesExA, kernel32, ''GetFileAttributesExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileAttributesExA]
end;
end;
{$ELSE}
function GetFileAttributesExA; external kernel32 name ''GetFileAttributesExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFileAttributesExW: Pointer;

function GetFileAttributesExW;
begin
GetProcedureAddress(_GetFileAttributesExW, kernel32, ''GetFileAttributesExW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileAttributesExW]
end;
end;
{$ELSE}
function GetFileAttributesExW; external kernel32 name ''GetFileAttributesExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetFileAttributesEx: Pointer;

function GetFileAttributesEx;
begin
GetProcedureAddress(_GetFileAttributesEx, kernel32, ''GetFileAttributesExW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileAttributesEx]
end;
end;
{$ELSE}
function GetFileAttributesEx; external kernel32 name ''GetFileAttributesExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetFileAttributesEx: Pointer;

function GetFileAttributesEx;
begin
GetProcedureAddress(_GetFileAttributesEx, kernel32, ''GetFileAttributesExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileAttributesEx]
end;
end;
{$ELSE}
function GetFileAttributesEx; external kernel32 name ''GetFileAttributesExA'';


{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetCompressedFileSizeA: Pointer;

function GetCompressedFileSizeA;
begin
GetProcedureAddress(_GetCompressedFileSizeA, kernel32, ''GetCompressedFileSizeA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCompressedFileSizeA]
end;
end;
{$ELSE}
function GetCompressedFileSizeA; external kernel32 name ''GetCompressedFileSizeA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCompressedFileSizeW: Pointer;

function GetCompressedFileSizeW;
begin
GetProcedureAddress(_GetCompressedFileSizeW, kernel32, ''GetCompressedFileSizeW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCompressedFileSizeW]
end;
end;
{$ELSE}
function GetCompressedFileSizeW; external kernel32 name ''GetCompressedFileSizeW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCompressedFileSize: Pointer;

function GetCompressedFileSize;
begin
GetProcedureAddress(_GetCompressedFileSize, kernel32, ''GetCompressedFileSizeW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCompressedFileSize]
end;
end;
{$ELSE}
function GetCompressedFileSize; external kernel32 name ''GetCompressedFileSizeW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCompressedFileSize: Pointer;

function GetCompressedFileSize;
begin
GetProcedureAddress(_GetCompressedFileSize, kernel32, ''GetCompressedFileSizeA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCompressedFileSize]
end;
end;
{$ELSE}
function GetCompressedFileSize; external kernel32 name ''GetCompressedFileSizeA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_DeleteFileA: Pointer;

function DeleteFileA;
begin
GetProcedureAddress(_DeleteFileA, kernel32, ''DeleteFileA'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteFileA]
end;
end;
{$ELSE}
function DeleteFileA; external kernel32 name ''DeleteFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteFileW: Pointer;

function DeleteFileW;
begin
GetProcedureAddress(_DeleteFileW, kernel32, ''DeleteFileW'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteFileW]
end;
end;
{$ELSE}
function DeleteFileW; external kernel32 name ''DeleteFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_DeleteFile: Pointer;

function DeleteFile;
begin
GetProcedureAddress(_DeleteFile, kernel32, ''DeleteFileW'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteFile]
end;
end;
{$ELSE}
function DeleteFile; external kernel32 name ''DeleteFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_DeleteFile: Pointer;

function DeleteFile;
begin
GetProcedureAddress(_DeleteFile, kernel32, ''DeleteFileA'');


asm
mov esp, ebp
pop ebp
jmp [_DeleteFile]
end;
end;
{$ELSE}
function DeleteFile; external kernel32 name ''DeleteFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstFileExA: Pointer;

function FindFirstFileExA;
begin
GetProcedureAddress(_FindFirstFileExA, kernel32, ''FindFirstFileExA'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstFileExA]
end;
end;
{$ELSE}
function FindFirstFileExA; external kernel32 name ''FindFirstFileExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstFileExW: Pointer;

function FindFirstFileExW;
begin
GetProcedureAddress(_FindFirstFileExW, kernel32, ''FindFirstFileExW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstFileExW]
end;
end;
{$ELSE}
function FindFirstFileExW; external kernel32 name ''FindFirstFileExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}


{$IFDEF DYNAMIC_LINK}
var
_FindFirstFileEx: Pointer;

function FindFirstFileEx;
begin
GetProcedureAddress(_FindFirstFileEx, kernel32, ''FindFirstFileExW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstFileEx]
end;
end;
{$ELSE}
function FindFirstFileEx; external kernel32 name ''FindFirstFileExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstFileEx: Pointer;

function FindFirstFileEx;
begin
GetProcedureAddress(_FindFirstFileEx, kernel32, ''FindFirstFileExA'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstFileEx]
end;
end;
{$ELSE}
function FindFirstFileEx; external kernel32 name ''FindFirstFileExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstFileA: Pointer;

function FindFirstFileA;
begin
GetProcedureAddress(_FindFirstFileA, kernel32, ''FindFirstFileA'');
asm
mov esp, ebp

pop ebp
jmp [_FindFirstFileA]
end;
end;
{$ELSE}
function FindFirstFileA; external kernel32 name ''FindFirstFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstFileW: Pointer;

function FindFirstFileW;
begin
GetProcedureAddress(_FindFirstFileW, kernel32, ''FindFirstFileW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstFileW]
end;
end;
{$ELSE}
function FindFirstFileW; external kernel32 name ''FindFirstFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstFile: Pointer;

function FindFirstFile;
begin
GetProcedureAddress(_FindFirstFile, kernel32, ''FindFirstFileW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstFile]
end;
end;
{$ELSE}
function FindFirstFile; external kernel32 name ''FindFirstFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstFile: Pointer;



function FindFirstFile;
begin
GetProcedureAddress(_FindFirstFile, kernel32, ''FindFirstFileA'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstFile]
end;
end;
{$ELSE}
function FindFirstFile; external kernel32 name ''FindFirstFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindNextFileA: Pointer;

function FindNextFileA;
begin
GetProcedureAddress(_FindNextFileA, kernel32, ''FindNextFileA'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextFileA]
end;
end;
{$ELSE}
function FindNextFileA; external kernel32 name ''FindNextFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindNextFileW: Pointer;

function FindNextFileW;
begin
GetProcedureAddress(_FindNextFileW, kernel32, ''FindNextFileW'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextFileW]
end;
end;
{$ELSE}
function FindNextFileW; external kernel32 name ''FindNextFileW'';

{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindNextFile: Pointer;

function FindNextFile;
begin
GetProcedureAddress(_FindNextFile, kernel32, ''FindNextFileW'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextFile]
end;
end;
{$ELSE}
function FindNextFile; external kernel32 name ''FindNextFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindNextFile: Pointer;

function FindNextFile;
begin
GetProcedureAddress(_FindNextFile, kernel32, ''FindNextFileA'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextFile]
end;
end;
{$ELSE}
function FindNextFile; external kernel32 name ''FindNextFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SearchPathA: Pointer;

function SearchPathA;
begin
GetProcedureAddress(_SearchPathA, kernel32, ''SearchPathA'');
asm
mov esp, ebp
pop ebp


jmp [_SearchPathA]
end;
end;
{$ELSE}
function SearchPathA; external kernel32 name ''SearchPathA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SearchPathW: Pointer;

function SearchPathW;
begin
GetProcedureAddress(_SearchPathW, kernel32, ''SearchPathW'');
asm
mov esp, ebp
pop ebp
jmp [_SearchPathW]
end;
end;
{$ELSE}
function SearchPathW; external kernel32 name ''SearchPathW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SearchPath: Pointer;

function SearchPath;
begin
GetProcedureAddress(_SearchPath, kernel32, ''SearchPathW'');
asm
mov esp, ebp
pop ebp
jmp [_SearchPath]
end;
end;
{$ELSE}
function SearchPath; external kernel32 name ''SearchPathW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SearchPath: Pointer;

function SearchPath;
begin
GetProcedureAddress(_SearchPath, kernel32, ''SearchPathA'');
asm
mov esp, ebp
pop ebp
jmp [_SearchPath]
end;
end;
{$ELSE}
function SearchPath; external kernel32 name ''SearchPathA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CopyFileA: Pointer;

function CopyFileA;
begin
GetProcedureAddress(_CopyFileA, kernel32, ''CopyFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CopyFileA]
end;
end;
{$ELSE}
function CopyFileA; external kernel32 name ''CopyFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CopyFileW: Pointer;

function CopyFileW;
begin
GetProcedureAddress(_CopyFileW, kernel32, ''CopyFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CopyFileW]
end;
end;
{$ELSE}
function CopyFileW; external kernel32 name ''CopyFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CopyFile: Pointer;

function CopyFile;
begin
GetProcedureAddress(_CopyFile, kernel32, ''CopyFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CopyFile]
end;
end;
{$ELSE}
function CopyFile; external kernel32 name ''CopyFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CopyFile: Pointer;

function CopyFile;
begin
GetProcedureAddress(_CopyFile, kernel32, ''CopyFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CopyFile]
end;
end;
{$ELSE}
function CopyFile; external kernel32 name ''CopyFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CopyFileExA: Pointer;

function CopyFileExA;
begin
GetProcedureAddress(_CopyFileExA, kernel32, ''CopyFileExA'');
asm
mov esp, ebp
pop ebp
jmp [_CopyFileExA]
end;
end;
{$ELSE}
function CopyFileExA; external kernel32 name ''CopyFileExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CopyFileExW: Pointer;

function CopyFileExW;
begin
GetProcedureAddress(_CopyFileExW, kernel32, ''CopyFileExW'');
asm
mov esp, ebp
pop ebp
jmp [_CopyFileExW]
end;
end;
{$ELSE}
function CopyFileExW; external kernel32 name ''CopyFileExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CopyFileEx: Pointer;

function CopyFileEx;
begin
GetProcedureAddress(_CopyFileEx, kernel32, ''CopyFileExW'');
asm
mov esp, ebp
pop ebp
jmp [_CopyFileEx]
end;
end;
{$ELSE}
function CopyFileEx; external kernel32 name ''CopyFileExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CopyFileEx: Pointer;

function CopyFileEx;
begin
GetProcedureAddress(_CopyFileEx, kernel32, ''CopyFileExA'');
asm
mov esp, ebp
pop ebp
jmp [_CopyFileEx]
end;
end;
{$ELSE}
function CopyFileEx; external kernel32 name ''CopyFileExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileA: Pointer;

function MoveFileA;
begin
GetProcedureAddress(_MoveFileA, kernel32, ''MoveFileA'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFileA]
end;
end;
{$ELSE}
function MoveFileA; external kernel32 name ''MoveFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileW: Pointer;

function MoveFileW;
begin
GetProcedureAddress(_MoveFileW, kernel32, ''MoveFileW'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFileW]
end;
end;
{$ELSE}
function MoveFileW; external kernel32 name ''MoveFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_MoveFile: Pointer;

function MoveFile;
begin
GetProcedureAddress(_MoveFile, kernel32, ''MoveFileW'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFile]
end;
end;
{$ELSE}
function MoveFile; external kernel32 name ''MoveFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var

_MoveFile: Pointer;

function MoveFile;
begin
GetProcedureAddress(_MoveFile, kernel32, ''MoveFileA'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFile]
end;
end;
{$ELSE}
function MoveFile; external kernel32 name ''MoveFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileExA: Pointer;

function MoveFileExA;
begin
GetProcedureAddress(_MoveFileExA, kernel32, ''MoveFileExA'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFileExA]
end;
end;
{$ELSE}
function MoveFileExA; external kernel32 name ''MoveFileExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileExW: Pointer;

function MoveFileExW;
begin
GetProcedureAddress(_MoveFileExW, kernel32, ''MoveFileExW'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFileExW]
end;
end;
{$ELSE}
function MoveFileExW; external kernel32 name ''MoveFileExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileEx: Pointer;

function MoveFileEx;
begin
GetProcedureAddress(_MoveFileEx, kernel32, ''MoveFileExW'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFileEx]
end;
end;
{$ELSE}
function MoveFileEx; external kernel32 name ''MoveFileExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileEx: Pointer;

function MoveFileEx;
begin
GetProcedureAddress(_MoveFileEx, kernel32, ''MoveFileExA'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFileEx]
end;
end;
{$ELSE}
function MoveFileEx; external kernel32 name ''MoveFileExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileWithProgressA: Pointer;

function MoveFileWithProgressA;
begin
GetProcedureAddress(_MoveFileWithProgressA, kernel32, ''MoveFileWithProgressA'');
asm
mov esp, ebp

pop ebp
jmp [_MoveFileWithProgressA]
end;
end;
{$ELSE}
function MoveFileWithProgressA; external kernel32 name ''MoveFileWithProgressA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileWithProgressW: Pointer;

function MoveFileWithProgressW;
begin
GetProcedureAddress(_MoveFileWithProgressW, kernel32, ''MoveFileWithProgressW'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFileWithProgressW]
end;
end;
{$ELSE}
function MoveFileWithProgressW; external kernel32 name ''MoveFileWithProgressW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileWithProgress: Pointer;

function MoveFileWithProgress;
begin
GetProcedureAddress(_MoveFileWithProgress, kernel32, ''MoveFileWithProgressW'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFileWithProgress]
end;
end;
{$ELSE}
function MoveFileWithProgress; external kernel32 name ''MoveFileWithProgressW'';

{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_MoveFileWithProgress: Pointer;

function MoveFileWithProgress;
begin
GetProcedureAddress(_MoveFileWithProgress, kernel32, ''MoveFileWithProgressA'');
asm
mov esp, ebp
pop ebp
jmp [_MoveFileWithProgress]
end;
end;
{$ELSE}
function MoveFileWithProgress; external kernel32 name ''MoveFileWithProgressA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ReplaceFileA: Pointer;

function ReplaceFileA;
begin
GetProcedureAddress(_ReplaceFileA, kernel32, ''ReplaceFileA'');
asm
mov esp, ebp
pop ebp
jmp [_ReplaceFileA]
end;
end;
{$ELSE}
function ReplaceFileA; external kernel32 name ''ReplaceFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReplaceFileW: Pointer;

function ReplaceFileW;
begin
GetProcedureAddress(_ReplaceFileW, kernel32, ''ReplaceFileW'');
asm
mov esp, ebp
pop ebp
jmp [_ReplaceFileW]
end;
end;
{$ELSE}
function ReplaceFileW; external kernel32 name ''ReplaceFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ReplaceFile: Pointer;

function ReplaceFile;
begin
GetProcedureAddress(_ReplaceFile, kernel32, ''ReplaceFileW'');
asm
mov esp, ebp
pop ebp
jmp [_ReplaceFile]
end;
end;
{$ELSE}
function ReplaceFile; external kernel32 name ''ReplaceFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ReplaceFile: Pointer;

function ReplaceFile;
begin
GetProcedureAddress(_ReplaceFile, kernel32, ''ReplaceFileA'');
asm
mov esp, ebp
pop ebp
jmp [_ReplaceFile]
end;
end;
{$ELSE}
function ReplaceFile; external kernel32 name ''ReplaceFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateHardLinkA: Pointer;

function CreateHardLinkA;
begin
GetProcedureAddress(_CreateHardLinkA, kernel32, ''CreateHardLinkA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateHardLinkA]
end;
end;
{$ELSE}
function CreateHardLinkA; external kernel32 name ''CreateHardLinkA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateHardLinkW: Pointer;

function CreateHardLinkW;
begin
GetProcedureAddress(_CreateHardLinkW, kernel32, ''CreateHardLinkW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateHardLinkW]
end;
end;
{$ELSE}
function CreateHardLinkW; external kernel32 name ''CreateHardLinkW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateHardLink: Pointer;

function CreateHardLink;
begin
GetProcedureAddress(_CreateHardLink, kernel32, ''CreateHardLinkW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateHardLink]
end;
end;
{$ELSE}


function CreateHardLink; external kernel32 name ''CreateHardLinkW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateHardLink: Pointer;

function CreateHardLink;
begin
GetProcedureAddress(_CreateHardLink, kernel32, ''CreateHardLinkA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateHardLink]
end;
end;
{$ELSE}
function CreateHardLink; external kernel32 name ''CreateHardLinkA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstStreamW: Pointer;

function FindFirstStreamW;
begin
GetProcedureAddress(_FindFirstStreamW, kernel32, ''FindFirstStreamW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstStreamW]
end;
end;
{$ELSE}
function FindFirstStreamW; external kernel32 name ''FindFirstStreamW'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindNextStreamW: Pointer;

function FindNextStreamW;
begin
GetProcedureAddress(_FindNextStreamW, kernel32, ''FindNextStreamW'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextStreamW]
end;
end;
{$ELSE}
function FindNextStreamW; external kernel32 name ''FindNextStreamW'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateNamedPipeA: Pointer;

function CreateNamedPipeA;
begin
GetProcedureAddress(_CreateNamedPipeA, kernel32, ''CreateNamedPipeA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateNamedPipeA]
end;
end;
{$ELSE}
function CreateNamedPipeA; external kernel32 name ''CreateNamedPipeA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateNamedPipeW: Pointer;

function CreateNamedPipeW;
begin
GetProcedureAddress(_CreateNamedPipeW, kernel32, ''CreateNamedPipeW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateNamedPipeW]
end;
end;
{$ELSE}
function CreateNamedPipeW; external kernel32 name ''CreateNamedPipeW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateNamedPipe: Pointer;

function CreateNamedPipe;
begin
GetProcedureAddress(_CreateNamedPipe, kernel32, ''CreateNamedPipeW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateNamedPipe]
end;
end;
{$ELSE}
function CreateNamedPipe; external kernel32 name ''CreateNamedPipeW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateNamedPipe: Pointer;

function CreateNamedPipe;
begin
GetProcedureAddress(_CreateNamedPipe, kernel32, ''CreateNamedPipeA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateNamedPipe]
end;
end;
{$ELSE}
function CreateNamedPipe; external kernel32 name ''CreateNamedPipeA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetNamedPipeHandleStateA: Pointer;

function GetNamedPipeHandleStateA;
begin
GetProcedureAddress(_GetNamedPipeHandleStateA, kernel32, ''GetNamedPipeHandleStateA'');

asm
mov esp, ebp
pop ebp
jmp [_GetNamedPipeHandleStateA]
end;
end;
{$ELSE}
function GetNamedPipeHandleStateA; external kernel32 name ''GetNamedPipeHandleStateA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetNamedPipeHandleStateW: Pointer;

function GetNamedPipeHandleStateW;
begin
GetProcedureAddress(_GetNamedPipeHandleStateW, kernel32, ''GetNamedPipeHandleStateW'');
asm
mov esp, ebp
pop ebp
jmp [_GetNamedPipeHandleStateW]
end;
end;
{$ELSE}
function GetNamedPipeHandleStateW; external kernel32 name ''GetNamedPipeHandleStateW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetNamedPipeHandleState: Pointer;

function GetNamedPipeHandleState;
begin
GetProcedureAddress(_GetNamedPipeHandleState, kernel32, ''GetNamedPipeHandleStateW'');
asm
mov esp, ebp
pop ebp
jmp [_GetNamedPipeHandleState]
end;
end;


{$ELSE}
function GetNamedPipeHandleState; external kernel32 name ''GetNamedPipeHandleStateW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetNamedPipeHandleState: Pointer;

function GetNamedPipeHandleState;
begin
GetProcedureAddress(_GetNamedPipeHandleState, kernel32, ''GetNamedPipeHandleStateA'');
asm
mov esp, ebp
pop ebp
jmp [_GetNamedPipeHandleState]
end;
end;
{$ELSE}
function GetNamedPipeHandleState; external kernel32 name ''GetNamedPipeHandleStateA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CallNamedPipeA: Pointer;

function CallNamedPipeA;
begin
GetProcedureAddress(_CallNamedPipeA, kernel32, ''CallNamedPipeA'');
asm
mov esp, ebp
pop ebp
jmp [_CallNamedPipeA]
end;
end;
{$ELSE}
function CallNamedPipeA; external kernel32 name ''CallNamedPipeA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CallNamedPipeW: Pointer;

function CallNamedPipeW;
begin
GetProcedureAddress(_CallNamedPipeW, kernel32, ''CallNamedPipeW'');
asm
mov esp, ebp
pop ebp
jmp [_CallNamedPipeW]
end;
end;
{$ELSE}
function CallNamedPipeW; external kernel32 name ''CallNamedPipeW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CallNamedPipe: Pointer;

function CallNamedPipe;
begin
GetProcedureAddress(_CallNamedPipe, kernel32, ''CallNamedPipeW'');
asm
mov esp, ebp
pop ebp
jmp [_CallNamedPipe]
end;
end;
{$ELSE}
function CallNamedPipe; external kernel32 name ''CallNamedPipeW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CallNamedPipe: Pointer;

function CallNamedPipe;
begin
GetProcedureAddress(_CallNamedPipe, kernel32, ''CallNamedPipeA'');
asm
mov esp, ebp
pop ebp
jmp [_CallNamedPipe]
end;

end;
{$ELSE}
function CallNamedPipe; external kernel32 name ''CallNamedPipeA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_WaitNamedPipeA: Pointer;

function WaitNamedPipeA;
begin
GetProcedureAddress(_WaitNamedPipeA, kernel32, ''WaitNamedPipeA'');
asm
mov esp, ebp
pop ebp
jmp [_WaitNamedPipeA]
end;
end;
{$ELSE}
function WaitNamedPipeA; external kernel32 name ''WaitNamedPipeA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WaitNamedPipeW: Pointer;

function WaitNamedPipeW;
begin
GetProcedureAddress(_WaitNamedPipeW, kernel32, ''WaitNamedPipeW'');
asm
mov esp, ebp
pop ebp
jmp [_WaitNamedPipeW]
end;
end;
{$ELSE}
function WaitNamedPipeW; external kernel32 name ''WaitNamedPipeW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_WaitNamedPipe: Pointer;

function WaitNamedPipe;
begin

GetProcedureAddress(_WaitNamedPipe, kernel32, ''WaitNamedPipeW'');
asm
mov esp, ebp
pop ebp
jmp [_WaitNamedPipe]
end;
end;
{$ELSE}
function WaitNamedPipe; external kernel32 name ''WaitNamedPipeW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_WaitNamedPipe: Pointer;

function WaitNamedPipe;
begin
GetProcedureAddress(_WaitNamedPipe, kernel32, ''WaitNamedPipeA'');
asm
mov esp, ebp
pop ebp
jmp [_WaitNamedPipe]
end;
end;
{$ELSE}
function WaitNamedPipe; external kernel32 name ''WaitNamedPipeA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetVolumeLabelA: Pointer;

function SetVolumeLabelA;
begin
GetProcedureAddress(_SetVolumeLabelA, kernel32, ''SetVolumeLabelA'');
asm
mov esp, ebp
pop ebp
jmp [_SetVolumeLabelA]
end;
end;
{$ELSE}
function SetVolumeLabelA; external kernel32 name ''SetVolumeLabelA'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetVolumeLabelW: Pointer;

function SetVolumeLabelW;
begin
GetProcedureAddress(_SetVolumeLabelW, kernel32, ''SetVolumeLabelW'');
asm
mov esp, ebp
pop ebp
jmp [_SetVolumeLabelW]
end;
end;
{$ELSE}
function SetVolumeLabelW; external kernel32 name ''SetVolumeLabelW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetVolumeLabel: Pointer;

function SetVolumeLabel;
begin
GetProcedureAddress(_SetVolumeLabel, kernel32, ''SetVolumeLabelW'');
asm
mov esp, ebp
pop ebp
jmp [_SetVolumeLabel]
end;
end;
{$ELSE}
function SetVolumeLabel; external kernel32 name ''SetVolumeLabelW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetVolumeLabel: Pointer;

function SetVolumeLabel;
begin
GetProcedureAddress(_SetVolumeLabel, kernel32, ''SetVolumeLabelA'');

asm
mov esp, ebp
pop ebp
jmp [_SetVolumeLabel]
end;
end;
{$ELSE}
function SetVolumeLabel; external kernel32 name ''SetVolumeLabelA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetFileApisToOEM: Pointer;

procedure SetFileApisToOEM;
begin
GetProcedureAddress(_SetFileApisToOEM, kernel32, ''SetFileApisToOEM'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileApisToOEM]
end;
end;
{$ELSE}
procedure SetFileApisToOEM; external kernel32 name ''SetFileApisToOEM'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFileApisToANSI: Pointer;

procedure SetFileApisToANSI;
begin
GetProcedureAddress(_SetFileApisToANSI, kernel32, ''SetFileApisToANSI'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileApisToANSI]
end;
end;
{$ELSE}
procedure SetFileApisToANSI; external kernel32 name ''SetFileApisToANSI'';
{$ENDIF DYNAMIC_LINK}


{$IFDEF DYNAMIC_LINK}
var
_AreFileApisANSI: Pointer;

function AreFileApisANSI;
begin
GetProcedureAddress(_AreFileApisANSI, kernel32, ''AreFileApisANSI'');
asm
mov esp, ebp
pop ebp
jmp [_AreFileApisANSI]
end;
end;
{$ELSE}
function AreFileApisANSI; external kernel32 name ''AreFileApisANSI'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumeInformationA: Pointer;

function GetVolumeInformationA;
begin
GetProcedureAddress(_GetVolumeInformationA, kernel32, ''GetVolumeInformationA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumeInformationA]
end;
end;
{$ELSE}
function GetVolumeInformationA; external kernel32 name ''GetVolumeInformationA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumeInformationW: Pointer;

function GetVolumeInformationW;
begin
GetProcedureAddress(_GetVolumeInformationW, kernel32, ''GetVolumeInformationW'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumeInformationW]
end;
end;
{$ELSE}
function GetVolumeInformationW; external kernel32 name ''GetVolumeInformationW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumeInformation: Pointer;

function GetVolumeInformation;
begin
GetProcedureAddress(_GetVolumeInformation, kernel32, ''GetVolumeInformationW'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumeInformation]
end;
end;
{$ELSE}
function GetVolumeInformation; external kernel32 name ''GetVolumeInformationW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumeInformation: Pointer;

function GetVolumeInformation;
begin
GetProcedureAddress(_GetVolumeInformation, kernel32, ''GetVolumeInformationA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumeInformation]
end;
end;
{$ELSE}
function GetVolumeInformation; external kernel32 name ''GetVolumeInformationA'';


{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CancelIo: Pointer;

function CancelIo;
begin
GetProcedureAddress(_CancelIo, kernel32, ''CancelIo'');
asm
mov esp, ebp
pop ebp
jmp [_CancelIo]
end;
end;
{$ELSE}
function CancelIo; external kernel32 name ''CancelIo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ClearEventLogA: Pointer;

function ClearEventLogA;
begin
GetProcedureAddress(_ClearEventLogA, advapi32, ''ClearEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_ClearEventLogA]
end;
end;
{$ELSE}
function ClearEventLogA; external advapi32 name ''ClearEventLogA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ClearEventLogW: Pointer;

function ClearEventLogW;
begin
GetProcedureAddress(_ClearEventLogW, advapi32, ''ClearEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_ClearEventLogW]


end;
end;
{$ELSE}
function ClearEventLogW; external advapi32 name ''ClearEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ClearEventLog: Pointer;

function ClearEventLog;
begin
GetProcedureAddress(_ClearEventLog, advapi32, ''ClearEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_ClearEventLog]
end;
end;
{$ELSE}
function ClearEventLog; external advapi32 name ''ClearEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ClearEventLog: Pointer;

function ClearEventLog;
begin
GetProcedureAddress(_ClearEventLog, advapi32, ''ClearEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_ClearEventLog]
end;
end;
{$ELSE}
function ClearEventLog; external advapi32 name ''ClearEventLogA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_BackupEventLogA: Pointer;

function BackupEventLogA;

begin
GetProcedureAddress(_BackupEventLogA, advapi32, ''BackupEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_BackupEventLogA]
end;
end;
{$ELSE}
function BackupEventLogA; external advapi32 name ''BackupEventLogA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BackupEventLogW: Pointer;

function BackupEventLogW;
begin
GetProcedureAddress(_BackupEventLogW, advapi32, ''BackupEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_BackupEventLogW]
end;
end;
{$ELSE}
function BackupEventLogW; external advapi32 name ''BackupEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_BackupEventLog: Pointer;

function BackupEventLog;
begin
GetProcedureAddress(_BackupEventLog, advapi32, ''BackupEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_BackupEventLog]
end;
end;
{$ELSE}
function BackupEventLog; external advapi32 name ''BackupEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_BackupEventLog: Pointer;

function BackupEventLog;
begin
GetProcedureAddress(_BackupEventLog, advapi32, ''BackupEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_BackupEventLog]
end;
end;
{$ELSE}
function BackupEventLog; external advapi32 name ''BackupEventLogA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CloseEventLog: Pointer;

function CloseEventLog;
begin
GetProcedureAddress(_CloseEventLog, advapi32, ''CloseEventLog'');
asm
mov esp, ebp
pop ebp
jmp [_CloseEventLog]
end;
end;
{$ELSE}
function CloseEventLog; external advapi32 name ''CloseEventLog'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeregisterEventSource: Pointer;

function DeregisterEventSource;
begin
GetProcedureAddress(_DeregisterEventSource, advapi32, ''DeregisterEventSource'');

asm
mov esp, ebp
pop ebp
jmp [_DeregisterEventSource]
end;
end;
{$ELSE}
function DeregisterEventSource; external advapi32 name ''DeregisterEventSource'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_NotifyChangeEventLog: Pointer;

function NotifyChangeEventLog;
begin
GetProcedureAddress(_NotifyChangeEventLog, advapi32, ''NotifyChangeEventLog'');
asm
mov esp, ebp
pop ebp
jmp [_NotifyChangeEventLog]
end;
end;
{$ELSE}
function NotifyChangeEventLog; external advapi32 name ''NotifyChangeEventLog'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetNumberOfEventLogRecords: Pointer;

function GetNumberOfEventLogRecords;
begin
GetProcedureAddress(_GetNumberOfEventLogRecords, advapi32, ''GetNumberOfEventLogRecords'');
asm
mov esp, ebp
pop ebp
jmp [_GetNumberOfEventLogRecords]
end;
end;
{$ELSE}
function GetNumberOfEventLogRecords; external advapi32 name ''GetNumberOfEventLogRecords'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetOldestEventLogRecord: Pointer;

function GetOldestEventLogRecord;
begin
GetProcedureAddress(_GetOldestEventLogRecord, advapi32, ''GetOldestEventLogRecord'');
asm
mov esp, ebp
pop ebp
jmp [_GetOldestEventLogRecord]
end;
end;
{$ELSE}
function GetOldestEventLogRecord; external advapi32 name ''GetOldestEventLogRecord'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenEventLogA: Pointer;

function OpenEventLogA;
begin
GetProcedureAddress(_OpenEventLogA, advapi32, ''OpenEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEventLogA]
end;
end;
{$ELSE}
function OpenEventLogA; external advapi32 name ''OpenEventLogA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenEventLogW: Pointer;

function OpenEventLogW;
begin
GetProcedureAddress(_OpenEventLogW, advapi32, ''OpenEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEventLogW]
end;
end;
{$ELSE}
function OpenEventLogW; external advapi32 name ''OpenEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OpenEventLog: Pointer;

function OpenEventLog;
begin
GetProcedureAddress(_OpenEventLog, advapi32, ''OpenEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEventLog]
end;
end;
{$ELSE}
function OpenEventLog; external advapi32 name ''OpenEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OpenEventLog: Pointer;

function OpenEventLog;
begin
GetProcedureAddress(_OpenEventLog, advapi32, ''OpenEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenEventLog]
end;
end;
{$ELSE}
function OpenEventLog; external advapi32 name ''OpenEventLogA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var

_RegisterEventSourceA: Pointer;

function RegisterEventSourceA;
begin
GetProcedureAddress(_RegisterEventSourceA, advapi32, ''RegisterEventSourceA'');
asm
mov esp, ebp
pop ebp
jmp [_RegisterEventSourceA]
end;
end;
{$ELSE}
function RegisterEventSourceA; external advapi32 name ''RegisterEventSourceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RegisterEventSourceW: Pointer;

function RegisterEventSourceW;
begin
GetProcedureAddress(_RegisterEventSourceW, advapi32, ''RegisterEventSourceW'');
asm
mov esp, ebp
pop ebp
jmp [_RegisterEventSourceW]
end;
end;
{$ELSE}
function RegisterEventSourceW; external advapi32 name ''RegisterEventSourceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_RegisterEventSource: Pointer;

function RegisterEventSource;
begin
GetProcedureAddress(_RegisterEventSource, advapi32, ''RegisterEventSourceW'');

asm
mov esp, ebp
pop ebp
jmp [_RegisterEventSource]
end;
end;
{$ELSE}
function RegisterEventSource; external advapi32 name ''RegisterEventSourceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_RegisterEventSource: Pointer;

function RegisterEventSource;
begin
GetProcedureAddress(_RegisterEventSource, advapi32, ''RegisterEventSourceA'');
asm
mov esp, ebp
pop ebp
jmp [_RegisterEventSource]
end;
end;
{$ELSE}
function RegisterEventSource; external advapi32 name ''RegisterEventSourceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_OpenBackupEventLogA: Pointer;

function OpenBackupEventLogA;
begin
GetProcedureAddress(_OpenBackupEventLogA, advapi32, ''OpenBackupEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenBackupEventLogA]
end;
end;
{$ELSE}
function OpenBackupEventLogA; external advapi32 name ''OpenBackupEventLogA'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenBackupEventLogW: Pointer;

function OpenBackupEventLogW;
begin
GetProcedureAddress(_OpenBackupEventLogW, advapi32, ''OpenBackupEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenBackupEventLogW]
end;
end;
{$ELSE}
function OpenBackupEventLogW; external advapi32 name ''OpenBackupEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OpenBackupEventLog: Pointer;

function OpenBackupEventLog;
begin
GetProcedureAddress(_OpenBackupEventLog, advapi32, ''OpenBackupEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenBackupEventLog]
end;
end;
{$ELSE}
function OpenBackupEventLog; external advapi32 name ''OpenBackupEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OpenBackupEventLog: Pointer;

function OpenBackupEventLog;
begin
GetProcedureAddress(_OpenBackupEventLog, advapi32, ''OpenBackupEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenBackupEventLog]
end;
end;
{$ELSE}
function OpenBackupEventLog; external advapi32 name ''OpenBackupEventLogA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ReadEventLogA: Pointer;

function ReadEventLogA;
begin
GetProcedureAddress(_ReadEventLogA, advapi32, ''ReadEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_ReadEventLogA]
end;
end;
{$ELSE}
function ReadEventLogA; external advapi32 name ''ReadEventLogA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReadEventLogW: Pointer;

function ReadEventLogW;
begin
GetProcedureAddress(_ReadEventLogW, advapi32, ''ReadEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_ReadEventLogW]
end;
end;
{$ELSE}
function ReadEventLogW; external advapi32 name ''ReadEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ReadEventLog: Pointer;

function ReadEventLog;
begin
GetProcedureAddress(_ReadEventLog, advapi32, ''ReadEventLogW'');
asm
mov esp, ebp
pop ebp
jmp [_ReadEventLog]
end;
end;
{$ELSE}
function ReadEventLog; external advapi32 name ''ReadEventLogW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ReadEventLog: Pointer;

function ReadEventLog;
begin
GetProcedureAddress(_ReadEventLog, advapi32, ''ReadEventLogA'');
asm
mov esp, ebp
pop ebp
jmp [_ReadEventLog]
end;
end;
{$ELSE}
function ReadEventLog; external advapi32 name ''ReadEventLogA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ReportEventA: Pointer;

function ReportEventA;
begin
GetProcedureAddress(_ReportEventA, advapi32, ''ReportEventA'');
asm
mov esp, ebp
pop ebp
jmp [_ReportEventA]
end;
end;
{$ELSE}
function ReportEventA; external advapi32 name ''ReportEventA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReportEventW: Pointer;

function ReportEventW;
begin
GetProcedureAddress(_ReportEventW, advapi32, ''ReportEventW'');
asm
mov esp, ebp
pop ebp
jmp [_ReportEventW]
end;
end;
{$ELSE}
function ReportEventW; external advapi32 name ''ReportEventW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ReportEvent: Pointer;

function ReportEvent;
begin
GetProcedureAddress(_ReportEvent, advapi32, ''ReportEventW'');
asm
mov esp, ebp
pop ebp
jmp [_ReportEvent]
end;
end;
{$ELSE}
function ReportEvent; external advapi32 name ''ReportEventW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ReportEvent: Pointer;

function ReportEvent;
begin
GetProcedureAddress(_ReportEvent, advapi32, ''ReportEventA'');
asm
mov esp, ebp
pop ebp
jmp [_ReportEvent]
end;
end;
{$ELSE}
function ReportEvent; external advapi32 name ''ReportEventA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetEventLogInformation: Pointer;

function GetEventLogInformation;
begin
GetProcedureAddress(_GetEventLogInformation, advapi32, ''GetEventLogInformation'');
asm
mov esp, ebp
pop ebp
jmp [_GetEventLogInformation]
end;
end;
{$ELSE}
function GetEventLogInformation; external advapi32 name ''GetEventLogInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DuplicateToken: Pointer;

function DuplicateToken;
begin
GetProcedureAddress(_DuplicateToken, advapi32, ''DuplicateToken'');
asm
mov esp, ebp
pop ebp
jmp [_DuplicateToken]
end;
end;
{$ELSE}
function DuplicateToken; external advapi32 name ''DuplicateToken'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetKernelObjectSecurity: Pointer;

function GetKernelObjectSecurity;
begin
GetProcedureAddress(_GetKernelObjectSecurity, advapi32, ''GetKernelObjectSecurity'');
asm
mov esp, ebp
pop ebp
jmp [_GetKernelObjectSecurity]
end;
end;
{$ELSE}
function GetKernelObjectSecurity; external advapi32 name ''GetKernelObjectSecurity'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ImpersonateNamedPipeClient: Pointer;

function ImpersonateNamedPipeClient;
begin
GetProcedureAddress(_ImpersonateNamedPipeClient, advapi32, ''ImpersonateNamedPipeClient'');
asm
mov esp, ebp
pop ebp
jmp [_ImpersonateNamedPipeClient]
end;
end;
{$ELSE}
function ImpersonateNamedPipeClient; external advapi32 name ''ImpersonateNamedPipeClient'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ImpersonateSelf: Pointer;

function ImpersonateSelf;
begin
GetProcedureAddress(_ImpersonateSelf, advapi32, ''ImpersonateSelf'');
asm
mov esp, ebp
pop ebp
jmp [_ImpersonateSelf]
end;
end;
{$ELSE}
function ImpersonateSelf; external advapi32 name ''ImpersonateSelf'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RevertToSelf: Pointer;

function RevertToSelf;
begin
GetProcedureAddress(_RevertToSelf, advapi32, ''RevertToSelf'');
asm
mov esp, ebp
pop ebp
jmp [_RevertToSelf]
end;
end;
{$ELSE}
function RevertToSelf; external advapi32 name ''RevertToSelf'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetThreadToken: Pointer;

function SetThreadToken;
begin
GetProcedureAddress(_SetThreadToken, advapi32, ''SetThreadToken'');
asm
mov esp, ebp
pop ebp
jmp [_SetThreadToken]
end;
end;
{$ELSE}
function SetThreadToken; external advapi32 name ''SetThreadToken'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheck: Pointer;

function AccessCheck;
begin
GetProcedureAddress(_AccessCheck, advapi32, ''AccessCheck'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheck]
end;
end;
{$ELSE}
function AccessCheck; external advapi32 name ''AccessCheck'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByType: Pointer;

function AccessCheckByType;
begin
GetProcedureAddress(_AccessCheckByType, advapi32, ''AccessCheckByType'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByType]
end;
end;
{$ELSE}
function AccessCheckByType; external advapi32 name ''AccessCheckByType'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTypeResultList: Pointer;

function AccessCheckByTypeResultList;
begin
GetProcedureAddress(_AccessCheckByTypeResultList, advapi32, ''AccessCheckByTypeResultList'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTypeResultList]
end;
end;
{$ELSE}
function AccessCheckByTypeResultList; external advapi32 name ''AccessCheckByTypeResultList'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenProcessToken: Pointer;

function OpenProcessToken;
begin
GetProcedureAddress(_OpenProcessToken, advapi32, ''OpenProcessToken'');
asm
mov esp, ebp
pop ebp
jmp [_OpenProcessToken]
end;
end;
{$ELSE}
function OpenProcessToken; external advapi32 name ''OpenProcessToken'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OpenThreadToken: Pointer;

function OpenThreadToken;
begin
GetProcedureAddress(_OpenThreadToken, advapi32, ''OpenThreadToken'');
asm
mov esp, ebp
pop ebp
jmp [_OpenThreadToken]
end;
end;
{$ELSE}
function OpenThreadToken; external advapi32 name ''OpenThreadToken'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTokenInformation: Pointer;

function GetTokenInformation;
begin
GetProcedureAddress(_GetTokenInformation, advapi32, ''GetTokenInformation'');
asm
mov esp, ebp
pop ebp
jmp [_GetTokenInformation]
end;
end;
{$ELSE}
function GetTokenInformation; external advapi32 name ''GetTokenInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetTokenInformation: Pointer;

function SetTokenInformation;
begin
GetProcedureAddress(_SetTokenInformation, advapi32, ''SetTokenInformation'');
asm
mov esp, ebp
pop ebp
jmp [_SetTokenInformation]
end;
end;
{$ELSE}
function SetTokenInformation; external advapi32 name ''SetTokenInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AdjustTokenPrivileges: Pointer;

function AdjustTokenPrivileges;
begin
GetProcedureAddress(_AdjustTokenPrivileges, advapi32, ''AdjustTokenPrivileges'');
asm
mov esp, ebp
pop ebp

jmp [_AdjustTokenPrivileges]
end;
end;
{$ELSE}
function AdjustTokenPrivileges; external advapi32 name ''AdjustTokenPrivileges'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AdjustTokenGroups: Pointer;

function AdjustTokenGroups;
begin
GetProcedureAddress(_AdjustTokenGroups, advapi32, ''AdjustTokenGroups'');
asm
mov esp, ebp
pop ebp
jmp [_AdjustTokenGroups]
end;
end;
{$ELSE}
function AdjustTokenGroups; external advapi32 name ''AdjustTokenGroups'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PrivilegeCheck: Pointer;

function PrivilegeCheck;
begin
GetProcedureAddress(_PrivilegeCheck, advapi32, ''PrivilegeCheck'');
asm
mov esp, ebp
pop ebp
jmp [_PrivilegeCheck]
end;
end;
{$ELSE}
function PrivilegeCheck; external advapi32 name ''PrivilegeCheck'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckAndAuditAlarmA: Pointer;

function AccessCheckAndAuditAlarmA;
begin
GetProcedureAddress(_AccessCheckAndAuditAlarmA, advapi32, ''AccessCheckAndAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckAndAuditAlarmA]
end;
end;
{$ELSE}
function AccessCheckAndAuditAlarmA; external advapi32 name ''AccessCheckAndAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckAndAuditAlarmW: Pointer;

function AccessCheckAndAuditAlarmW;
begin
GetProcedureAddress(_AccessCheckAndAuditAlarmW, advapi32, ''AccessCheckAndAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckAndAuditAlarmW]
end;
end;
{$ELSE}
function AccessCheckAndAuditAlarmW; external advapi32 name ''AccessCheckAndAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckAndAuditAlarm: Pointer;

function AccessCheckAndAuditAlarm;
begin
GetProcedureAddress(_AccessCheckAndAuditAlarm, advapi32, ''AccessCheckAndAuditAlarmW'');

asm
mov esp, ebp
pop ebp
jmp [_AccessCheckAndAuditAlarm]
end;
end;
{$ELSE}
function AccessCheckAndAuditAlarm; external advapi32 name ''AccessCheckAndAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckAndAuditAlarm: Pointer;

function AccessCheckAndAuditAlarm;
begin
GetProcedureAddress(_AccessCheckAndAuditAlarm, advapi32, ''AccessCheckAndAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckAndAuditAlarm]
end;
end;
{$ELSE}
function AccessCheckAndAuditAlarm; external advapi32 name ''AccessCheckAndAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTypeAndAuditAlarmA: Pointer;

function AccessCheckByTypeAndAuditAlarmA;
begin
GetProcedureAddress(_AccessCheckByTypeAndAuditAlarmA, advapi32, ''AccessCheckByTypeAndAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTypeAndAuditAlarmA]

end;
end;
{$ELSE}
function AccessCheckByTypeAndAuditAlarmA; external advapi32 name ''AccessCheckByTypeAndAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTypeAndAuditAlarmW: Pointer;

function AccessCheckByTypeAndAuditAlarmW;
begin
GetProcedureAddress(_AccessCheckByTypeAndAuditAlarmW, advapi32, ''AccessCheckByTypeAndAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTypeAndAuditAlarmW]
end;
end;
{$ELSE}
function AccessCheckByTypeAndAuditAlarmW; external advapi32 name ''AccessCheckByTypeAndAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTypeAndAuditAlarm: Pointer;

function AccessCheckByTypeAndAuditAlarm;
begin
GetProcedureAddress(_AccessCheckByTypeAndAuditAlarm, advapi32, ''AccessCheckByTypeAndAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTypeAndAuditAlarm]


end;
end;
{$ELSE}
function AccessCheckByTypeAndAuditAlarm; external advapi32 name ''AccessCheckByTypeAndAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTypeAndAuditAlarm: Pointer;

function AccessCheckByTypeAndAuditAlarm;
begin
GetProcedureAddress(_AccessCheckByTypeAndAuditAlarm, advapi32, ''AccessCheckByTypeAndAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTypeAndAuditAlarm]
end;
end;
{$ELSE}
function AccessCheckByTypeAndAuditAlarm; external advapi32 name ''AccessCheckByTypeAndAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTypeResultListAndA: Pointer;

function AccessCheckByTypeResultListAndAuditAlarmA;
begin
GetProcedureAddress(_AccessCheckByTypeResultListAndA, advapi32, ''AccessCheckByTypeResultListAndAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTypeResultListAndA]
end;
end;
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarmA; external advapi32 name ''AccessCheckByTypeResultListAndAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTypeResultListAndW: Pointer;

function AccessCheckByTypeResultListAndAuditAlarmW;
begin
GetProcedureAddress(_AccessCheckByTypeResultListAndW, advapi32, ''AccessCheckByTypeResultListAndAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTypeResultListAndW]
end;
end;
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarmW; external advapi32 name ''AccessCheckByTypeResultListAndAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTypeResultListAnd: Pointer;

function AccessCheckByTypeResultListAndAuditAlarm;
begin
GetProcedureAddress(_AccessCheckByTypeResultListAnd, advapi32, ''AccessCheckByTypeResultListAndAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTypeResultListAnd]
end;
end;
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarm; external advapi32 name ''AccessCheckByTypeResultListAndAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTypeResultListAnd: Pointer;

function AccessCheckByTypeResultListAndAuditAlarm;
begin
GetProcedureAddress(_AccessCheckByTypeResultListAnd, advapi32, ''AccessCheckByTypeResultListAndAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTypeResultListAnd]
end;
end;
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarm; external advapi32 name ''AccessCheckByTypeResultListAndAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTRLAndAAByHA: Pointer;

function AccessCheckByTypeResultListAndAuditAlarmByHandleA;
begin
GetProcedureAddress(_AccessCheckByTRLAndAAByHA, advapi32, ''AccessCheckByTypeResultListAndAuditAlarmByHandleA'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTRLAndAAByHA]
end;
end;
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarmByHandleA; external advapi32 name ''AccessCheckByTypeResultListAndAuditAlarmByHandleA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTRLAndAAByHW: Pointer;

function AccessCheckByTypeResultListAndAuditAlarmByHandleW;
begin
GetProcedureAddress(_AccessCheckByTRLAndAAByHW, advapi32, ''AccessCheckByTypeResultListAndAuditAlarmByHandleW'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTRLAndAAByHW]
end;
end;
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarmByHandleW; external advapi32 name ''AccessCheckByTypeResultListAndAuditAlarmByHandleW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTRLAndAAByH: Pointer;

function AccessCheckByTypeResultListAndAuditAlarmByHandle;
begin
GetProcedureAddress(_AccessCheckByTRLAndAAByH, advapi32, ''AccessCheckByTypeResultListAndAuditAlarmByHandleW'');

asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTRLAndAAByH]
end;
end;
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarmByHandle; external advapi32 name ''AccessCheckByTypeResultListAndAuditAlarmByHandleW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_AccessCheckByTRLAndAAByH: Pointer;

function AccessCheckByTypeResultListAndAuditAlarmByHandle;
begin
GetProcedureAddress(_AccessCheckByTRLAndAAByH, advapi32, ''AccessCheckByTypeResultListAndAuditAlarmByHandleA'');
asm
mov esp, ebp
pop ebp
jmp [_AccessCheckByTRLAndAAByH]
end;
end;
{$ELSE}
function AccessCheckByTypeResultListAndAuditAlarmByHandle; external advapi32 name ''AccessCheckByTypeResultListAndAuditAlarmByHandleA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ObjectOpenAuditAlarmA: Pointer;

function ObjectOpenAuditAlarmA;
begin
GetProcedureAddress(_ObjectOpenAuditAlarmA, advapi32, ''ObjectOpenAuditAlarmA'');


asm
mov esp, ebp
pop ebp
jmp [_ObjectOpenAuditAlarmA]
end;
end;
{$ELSE}
function ObjectOpenAuditAlarmA; external advapi32 name ''ObjectOpenAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ObjectOpenAuditAlarmW: Pointer;

function ObjectOpenAuditAlarmW;
begin
GetProcedureAddress(_ObjectOpenAuditAlarmW, advapi32, ''ObjectOpenAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectOpenAuditAlarmW]
end;
end;
{$ELSE}
function ObjectOpenAuditAlarmW; external advapi32 name ''ObjectOpenAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ObjectOpenAuditAlarm: Pointer;

function ObjectOpenAuditAlarm;
begin
GetProcedureAddress(_ObjectOpenAuditAlarm, advapi32, ''ObjectOpenAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectOpenAuditAlarm]
end;
end;
{$ELSE}
function ObjectOpenAuditAlarm; external advapi32 name ''ObjectOpenAuditAlarmW'';

{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ObjectOpenAuditAlarm: Pointer;

function ObjectOpenAuditAlarm;
begin
GetProcedureAddress(_ObjectOpenAuditAlarm, advapi32, ''ObjectOpenAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectOpenAuditAlarm]
end;
end;
{$ELSE}
function ObjectOpenAuditAlarm; external advapi32 name ''ObjectOpenAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ObjectPrivilegeAuditAlarmA: Pointer;

function ObjectPrivilegeAuditAlarmA;
begin
GetProcedureAddress(_ObjectPrivilegeAuditAlarmA, advapi32, ''ObjectPrivilegeAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectPrivilegeAuditAlarmA]
end;
end;
{$ELSE}
function ObjectPrivilegeAuditAlarmA; external advapi32 name ''ObjectPrivilegeAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ObjectPrivilegeAuditAlarmW: Pointer;



function ObjectPrivilegeAuditAlarmW;
begin
GetProcedureAddress(_ObjectPrivilegeAuditAlarmW, advapi32, ''ObjectPrivilegeAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectPrivilegeAuditAlarmW]
end;
end;
{$ELSE}
function ObjectPrivilegeAuditAlarmW; external advapi32 name ''ObjectPrivilegeAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ObjectPrivilegeAuditAlarm: Pointer;

function ObjectPrivilegeAuditAlarm;
begin
GetProcedureAddress(_ObjectPrivilegeAuditAlarm, advapi32, ''ObjectPrivilegeAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectPrivilegeAuditAlarm]
end;
end;
{$ELSE}
function ObjectPrivilegeAuditAlarm; external advapi32 name ''ObjectPrivilegeAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ObjectPrivilegeAuditAlarm: Pointer;

function ObjectPrivilegeAuditAlarm;
begin
GetProcedureAddress(_ObjectPrivilegeAuditAlarm, advapi32, ''ObjectPrivilegeAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectPrivilegeAuditAlarm]
end;
end;
{$ELSE}
function ObjectPrivilegeAuditAlarm; external advapi32 name ''ObjectPrivilegeAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ObjectCloseAuditAlarmA: Pointer;

function ObjectCloseAuditAlarmA;
begin
GetProcedureAddress(_ObjectCloseAuditAlarmA, advapi32, ''ObjectCloseAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectCloseAuditAlarmA]
end;
end;
{$ELSE}
function ObjectCloseAuditAlarmA; external advapi32 name ''ObjectCloseAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ObjectCloseAuditAlarmW: Pointer;

function ObjectCloseAuditAlarmW;
begin
GetProcedureAddress(_ObjectCloseAuditAlarmW, advapi32, ''ObjectCloseAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectCloseAuditAlarmW]
end;
end;
{$ELSE}
function ObjectCloseAuditAlarmW; external advapi32 name ''ObjectCloseAuditAlarmW'';


{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ObjectCloseAuditAlarm: Pointer;

function ObjectCloseAuditAlarm;
begin
GetProcedureAddress(_ObjectCloseAuditAlarm, advapi32, ''ObjectCloseAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectCloseAuditAlarm]
end;
end;
{$ELSE}
function ObjectCloseAuditAlarm; external advapi32 name ''ObjectCloseAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ObjectCloseAuditAlarm: Pointer;

function ObjectCloseAuditAlarm;
begin
GetProcedureAddress(_ObjectCloseAuditAlarm, advapi32, ''ObjectCloseAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectCloseAuditAlarm]
end;
end;
{$ELSE}
function ObjectCloseAuditAlarm; external advapi32 name ''ObjectCloseAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ObjectDeleteAuditAlarmA: Pointer;

function ObjectDeleteAuditAlarmA;

begin
GetProcedureAddress(_ObjectDeleteAuditAlarmA, advapi32, ''ObjectDeleteAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectDeleteAuditAlarmA]
end;
end;
{$ELSE}
function ObjectDeleteAuditAlarmA; external advapi32 name ''ObjectDeleteAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ObjectDeleteAuditAlarmW: Pointer;

function ObjectDeleteAuditAlarmW;
begin
GetProcedureAddress(_ObjectDeleteAuditAlarmW, advapi32, ''ObjectDeleteAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectDeleteAuditAlarmW]
end;
end;
{$ELSE}
function ObjectDeleteAuditAlarmW; external advapi32 name ''ObjectDeleteAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ObjectDeleteAuditAlarm: Pointer;

function ObjectDeleteAuditAlarm;
begin
GetProcedureAddress(_ObjectDeleteAuditAlarm, advapi32, ''ObjectDeleteAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectDeleteAuditAlarm]
end;
end;
{$ELSE}
function ObjectDeleteAuditAlarm; external advapi32 name ''ObjectDeleteAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ObjectDeleteAuditAlarm: Pointer;

function ObjectDeleteAuditAlarm;
begin
GetProcedureAddress(_ObjectDeleteAuditAlarm, advapi32, ''ObjectDeleteAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_ObjectDeleteAuditAlarm]
end;
end;
{$ELSE}
function ObjectDeleteAuditAlarm; external advapi32 name ''ObjectDeleteAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_PrivilegedServiceAuditAlarmA: Pointer;

function PrivilegedServiceAuditAlarmA;
begin
GetProcedureAddress(_PrivilegedServiceAuditAlarmA, advapi32, ''PrivilegedServiceAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_PrivilegedServiceAuditAlarmA]
end;
end;
{$ELSE}
function PrivilegedServiceAuditAlarmA; external advapi32 name ''PrivilegedServiceAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PrivilegedServiceAuditAlarmW: Pointer;

function PrivilegedServiceAuditAlarmW;
begin
GetProcedureAddress(_PrivilegedServiceAuditAlarmW, advapi32, ''PrivilegedServiceAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_PrivilegedServiceAuditAlarmW]
end;
end;
{$ELSE}
function PrivilegedServiceAuditAlarmW; external advapi32 name ''PrivilegedServiceAuditAlarmW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_PrivilegedServiceAuditAlarm: Pointer;

function PrivilegedServiceAuditAlarm;
begin
GetProcedureAddress(_PrivilegedServiceAuditAlarm, advapi32, ''PrivilegedServiceAuditAlarmW'');
asm
mov esp, ebp
pop ebp
jmp [_PrivilegedServiceAuditAlarm]
end;
end;
{$ELSE}
function PrivilegedServiceAuditAlarm; external advapi32 name ''PrivilegedServiceAuditAlarmW'';


{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_PrivilegedServiceAuditAlarm: Pointer;

function PrivilegedServiceAuditAlarm;
begin
GetProcedureAddress(_PrivilegedServiceAuditAlarm, advapi32, ''PrivilegedServiceAuditAlarmA'');
asm
mov esp, ebp
pop ebp
jmp [_PrivilegedServiceAuditAlarm]
end;
end;
{$ELSE}
function PrivilegedServiceAuditAlarm; external advapi32 name ''PrivilegedServiceAuditAlarmA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_IsWellKnownSid: Pointer;

function IsWellKnownSid;
begin
GetProcedureAddress(_IsWellKnownSid, advapi32, ''IsWellKnownSid'');
asm
mov esp, ebp
pop ebp
jmp [_IsWellKnownSid]
end;
end;
{$ELSE}
function IsWellKnownSid; external advapi32 name ''IsWellKnownSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateWellKnownSid: Pointer;

function CreateWellKnownSid;
begin
GetProcedureAddress(_CreateWellKnownSid, advapi32, ''CreateWellKnownSid'');
asm
mov esp, ebp
pop ebp
jmp [_CreateWellKnownSid]
end;
end;
{$ELSE}
function CreateWellKnownSid; external advapi32 name ''CreateWellKnownSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EqualDomainSid: Pointer;

function EqualDomainSid;
begin
GetProcedureAddress(_EqualDomainSid, advapi32, ''EqualDomainSid'');
asm
mov esp, ebp
pop ebp
jmp [_EqualDomainSid]
end;
end;
{$ELSE}
function EqualDomainSid; external advapi32 name ''EqualDomainSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetWindowsAccountDomainSid: Pointer;

function GetWindowsAccountDomainSid;
begin
GetProcedureAddress(_GetWindowsAccountDomainSid, advapi32, ''GetWindowsAccountDomainSid'');
asm
mov esp, ebp
pop ebp
jmp [_GetWindowsAccountDomainSid]
end;
end;
{$ELSE}
function GetWindowsAccountDomainSid; external advapi32 name ''GetWindowsAccountDomainSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsValidSid: Pointer;

function IsValidSid;
begin
GetProcedureAddress(_IsValidSid, advapi32, ''IsValidSid'');
asm
mov esp, ebp
pop ebp
jmp [_IsValidSid]
end;
end;
{$ELSE}
function IsValidSid; external advapi32 name ''IsValidSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EqualSid: Pointer;

function EqualSid;
begin
GetProcedureAddress(_EqualSid, advapi32, ''EqualSid'');
asm
mov esp, ebp
pop ebp
jmp [_EqualSid]
end;
end;
{$ELSE}
function EqualSid; external advapi32 name ''EqualSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EqualPrefixSid: Pointer;

function EqualPrefixSid;
begin
GetProcedureAddress(_EqualPrefixSid, advapi32, ''EqualPrefixSid'');
asm
mov esp, ebp


pop ebp
jmp [_EqualPrefixSid]
end;
end;
{$ELSE}
function EqualPrefixSid; external advapi32 name ''EqualPrefixSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSidLengthRequired: Pointer;

function GetSidLengthRequired;
begin
GetProcedureAddress(_GetSidLengthRequired, advapi32, ''GetSidLengthRequired'');
asm
mov esp, ebp
pop ebp
jmp [_GetSidLengthRequired]
end;
end;
{$ELSE}
function GetSidLengthRequired; external advapi32 name ''GetSidLengthRequired'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AllocateAndInitializeSid: Pointer;

function AllocateAndInitializeSid;
begin
GetProcedureAddress(_AllocateAndInitializeSid, advapi32, ''AllocateAndInitializeSid'');
asm
mov esp, ebp
pop ebp
jmp [_AllocateAndInitializeSid]
end;
end;
{$ELSE}
function AllocateAndInitializeSid; external advapi32 name ''AllocateAndInitializeSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FreeSid: Pointer;

function FreeSid;
begin
GetProcedureAddress(_FreeSid, advapi32, ''FreeSid'');
asm
mov esp, ebp
pop ebp
jmp [_FreeSid]
end;
end;
{$ELSE}
function FreeSid; external advapi32 name ''FreeSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InitializeSid: Pointer;

function InitializeSid;
begin
GetProcedureAddress(_InitializeSid, advapi32, ''InitializeSid'');
asm
mov esp, ebp
pop ebp
jmp [_InitializeSid]
end;
end;
{$ELSE}
function InitializeSid; external advapi32 name ''InitializeSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSidIdentifierAuthority: Pointer;

function GetSidIdentifierAuthority;
begin
GetProcedureAddress(_GetSidIdentifierAuthority, advapi32, ''GetSidIdentifierAuthority'');
asm
mov esp, ebp
pop ebp
jmp [_GetSidIdentifierAuthority]

end;
end;
{$ELSE}
function GetSidIdentifierAuthority; external advapi32 name ''GetSidIdentifierAuthority'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSidSubAuthority: Pointer;

function GetSidSubAuthority;
begin
GetProcedureAddress(_GetSidSubAuthority, advapi32, ''GetSidSubAuthority'');
asm
mov esp, ebp
pop ebp
jmp [_GetSidSubAuthority]
end;
end;
{$ELSE}
function GetSidSubAuthority; external advapi32 name ''GetSidSubAuthority'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSidSubAuthorityCount: Pointer;

function GetSidSubAuthorityCount;
begin
GetProcedureAddress(_GetSidSubAuthorityCount, advapi32, ''GetSidSubAuthorityCount'');
asm
mov esp, ebp
pop ebp
jmp [_GetSidSubAuthorityCount]
end;
end;
{$ELSE}
function GetSidSubAuthorityCount; external advapi32 name ''GetSidSubAuthorityCount'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLengthSid: Pointer;

function GetLengthSid;
begin
GetProcedureAddress(_GetLengthSid, advapi32, ''GetLengthSid'');
asm
mov esp, ebp
pop ebp
jmp [_GetLengthSid]
end;
end;
{$ELSE}
function GetLengthSid; external advapi32 name ''GetLengthSid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CopySid: Pointer;

function CopySid;
begin
GetProcedureAddress(_CopySid, advapi32, ''CopySid'');
asm
mov esp, ebp
pop ebp
jmp [_CopySid]
end;
end;
{$ELSE}
function CopySid; external advapi32 name ''CopySid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AreAllAccessesGranted: Pointer;

function AreAllAccessesGranted;
begin
GetProcedureAddress(_AreAllAccessesGranted, advapi32, ''AreAllAccessesGranted'');
asm
mov esp, ebp
pop ebp
jmp [_AreAllAccessesGranted]
end;
end;
{$ELSE}
function AreAllAccessesGranted; external advapi32 name ''AreAllAccessesGranted'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AreAnyAccessesGranted: Pointer;

function AreAnyAccessesGranted;
begin
GetProcedureAddress(_AreAnyAccessesGranted, advapi32, ''AreAnyAccessesGranted'');
asm
mov esp, ebp
pop ebp
jmp [_AreAnyAccessesGranted]
end;
end;
{$ELSE}
function AreAnyAccessesGranted; external advapi32 name ''AreAnyAccessesGranted'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MapGenericMask: Pointer;

procedure MapGenericMask;
begin
GetProcedureAddress(_MapGenericMask, advapi32, ''MapGenericMask'');
asm
mov esp, ebp
pop ebp
jmp [_MapGenericMask]
end;
end;
{$ELSE}
procedure MapGenericMask; external advapi32 name ''MapGenericMask'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsValidAcl: Pointer;

function IsValidAcl;
begin
GetProcedureAddress(_IsValidAcl, advapi32, ''IsValidAcl'');
asm


mov esp, ebp
pop ebp
jmp [_IsValidAcl]
end;
end;
{$ELSE}
function IsValidAcl; external advapi32 name ''IsValidAcl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InitializeAcl: Pointer;

function InitializeAcl;
begin
GetProcedureAddress(_InitializeAcl, advapi32, ''InitializeAcl'');
asm
mov esp, ebp
pop ebp
jmp [_InitializeAcl]
end;
end;
{$ELSE}
function InitializeAcl; external advapi32 name ''InitializeAcl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetAclInformation: Pointer;

function GetAclInformation;
begin
GetProcedureAddress(_GetAclInformation, advapi32, ''GetAclInformation'');
asm
mov esp, ebp
pop ebp
jmp [_GetAclInformation]
end;
end;
{$ELSE}
function GetAclInformation; external advapi32 name ''GetAclInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetAclInformation: Pointer;

function SetAclInformation;
begin
GetProcedureAddress(_SetAclInformation, advapi32, ''SetAclInformation'');
asm
mov esp, ebp
pop ebp
jmp [_SetAclInformation]
end;
end;
{$ELSE}
function SetAclInformation; external advapi32 name ''SetAclInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAce: Pointer;

function AddAce;
begin
GetProcedureAddress(_AddAce, advapi32, ''AddAce'');
asm
mov esp, ebp
pop ebp
jmp [_AddAce]
end;
end;
{$ELSE}
function AddAce; external advapi32 name ''AddAce'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteAce: Pointer;

function DeleteAce;
begin
GetProcedureAddress(_DeleteAce, advapi32, ''DeleteAce'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteAce]
end;
end;
{$ELSE}
function DeleteAce; external advapi32 name ''DeleteAce'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetAce: Pointer;

function GetAce;
begin
GetProcedureAddress(_GetAce, advapi32, ''GetAce'');
asm
mov esp, ebp
pop ebp
jmp [_GetAce]
end;
end;
{$ELSE}
function GetAce; external advapi32 name ''GetAce'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAccessAllowedAce: Pointer;

function AddAccessAllowedAce;
begin
GetProcedureAddress(_AddAccessAllowedAce, advapi32, ''AddAccessAllowedAce'');
asm
mov esp, ebp
pop ebp
jmp [_AddAccessAllowedAce]
end;
end;
{$ELSE}
function AddAccessAllowedAce; external advapi32 name ''AddAccessAllowedAce'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAccessAllowedAceEx: Pointer;

function AddAccessAllowedAceEx;
begin
GetProcedureAddress(_AddAccessAllowedAceEx, advapi32, ''AddAccessAllowedAceEx'');
asm
mov esp, ebp
pop ebp
jmp [_AddAccessAllowedAceEx]
end;
end;
{$ELSE}
function AddAccessAllowedAceEx; external advapi32 name ''AddAccessAllowedAceEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAccessDeniedAce: Pointer;

function AddAccessDeniedAce;
begin
GetProcedureAddress(_AddAccessDeniedAce, advapi32, ''AddAccessDeniedAce'');
asm
mov esp, ebp
pop ebp
jmp [_AddAccessDeniedAce]
end;
end;
{$ELSE}
function AddAccessDeniedAce; external advapi32 name ''AddAccessDeniedAce'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAccessDeniedAceEx: Pointer;

function AddAccessDeniedAceEx;
begin
GetProcedureAddress(_AddAccessDeniedAceEx, advapi32, ''AddAccessDeniedAceEx'');
asm
mov esp, ebp
pop ebp
jmp [_AddAccessDeniedAceEx]
end;
end;
{$ELSE}
function AddAccessDeniedAceEx; external advapi32 name ''AddAccessDeniedAceEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAuditAccessAce: Pointer;


function AddAuditAccessAce;
begin
GetProcedureAddress(_AddAuditAccessAce, advapi32, ''AddAuditAccessAce'');
asm
mov esp, ebp
pop ebp
jmp [_AddAuditAccessAce]
end;
end;
{$ELSE}
function AddAuditAccessAce; external advapi32 name ''AddAuditAccessAce'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAuditAccessAceEx: Pointer;

function AddAuditAccessAceEx;
begin
GetProcedureAddress(_AddAuditAccessAceEx, advapi32, ''AddAuditAccessAceEx'');
asm
mov esp, ebp
pop ebp
jmp [_AddAuditAccessAceEx]
end;
end;
{$ELSE}
function AddAuditAccessAceEx; external advapi32 name ''AddAuditAccessAceEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAccessAllowedObjectAce: Pointer;

function AddAccessAllowedObjectAce;
begin
GetProcedureAddress(_AddAccessAllowedObjectAce, advapi32, ''AddAccessAllowedObjectAce'');
asm
mov esp, ebp
pop ebp

jmp [_AddAccessAllowedObjectAce]
end;
end;
{$ELSE}
function AddAccessAllowedObjectAce; external advapi32 name ''AddAccessAllowedObjectAce'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAccessDeniedObjectAce: Pointer;

function AddAccessDeniedObjectAce;
begin
GetProcedureAddress(_AddAccessDeniedObjectAce, advapi32, ''AddAccessDeniedObjectAce'');
asm
mov esp, ebp
pop ebp
jmp [_AddAccessDeniedObjectAce]
end;
end;
{$ELSE}
function AddAccessDeniedObjectAce; external advapi32 name ''AddAccessDeniedObjectAce'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddAuditAccessObjectAce: Pointer;

function AddAuditAccessObjectAce;
begin
GetProcedureAddress(_AddAuditAccessObjectAce, advapi32, ''AddAuditAccessObjectAce'');
asm
mov esp, ebp
pop ebp
jmp [_AddAuditAccessObjectAce]
end;
end;
{$ELSE}
function AddAuditAccessObjectAce; external advapi32 name ''AddAuditAccessObjectAce'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstFreeAce: Pointer;

function FindFirstFreeAce;
begin
GetProcedureAddress(_FindFirstFreeAce, advapi32, ''FindFirstFreeAce'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstFreeAce]
end;
end;
{$ELSE}
function FindFirstFreeAce; external advapi32 name ''FindFirstFreeAce'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InitializeSecurityDescriptor: Pointer;

function InitializeSecurityDescriptor;
begin
GetProcedureAddress(_InitializeSecurityDescriptor, advapi32, ''InitializeSecurityDescriptor'');
asm
mov esp, ebp
pop ebp
jmp [_InitializeSecurityDescriptor]
end;
end;
{$ELSE}
function InitializeSecurityDescriptor; external advapi32 name ''InitializeSecurityDescriptor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsValidSecurityDescriptor: Pointer;

function IsValidSecurityDescriptor;
begin
GetProcedureAddress(_IsValidSecurityDescriptor, advapi32, ''IsValidSecurityDescriptor'');
asm
mov esp, ebp
pop ebp
jmp [_IsValidSecurityDescriptor]
end;
end;
{$ELSE}
function IsValidSecurityDescriptor; external advapi32 name ''IsValidSecurityDescriptor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSecurityDescriptorLength: Pointer;

function GetSecurityDescriptorLength;
begin
GetProcedureAddress(_GetSecurityDescriptorLength, advapi32, ''GetSecurityDescriptorLength'');
asm
mov esp, ebp
pop ebp
jmp [_GetSecurityDescriptorLength]
end;
end;
{$ELSE}
function GetSecurityDescriptorLength; external advapi32 name ''GetSecurityDescriptorLength'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSecurityDescriptorControl: Pointer;

function GetSecurityDescriptorControl;
begin
GetProcedureAddress(_GetSecurityDescriptorControl, advapi32, ''GetSecurityDescriptorControl'');

asm
mov esp, ebp
pop ebp
jmp [_GetSecurityDescriptorControl]
end;
end;
{$ELSE}
function GetSecurityDescriptorControl; external advapi32 name ''GetSecurityDescriptorControl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSecurityDescriptorControl: Pointer;

function SetSecurityDescriptorControl;
begin
GetProcedureAddress(_SetSecurityDescriptorControl, advapi32, ''SetSecurityDescriptorControl'');
asm
mov esp, ebp
pop ebp
jmp [_SetSecurityDescriptorControl]
end;
end;
{$ELSE}
function SetSecurityDescriptorControl; external advapi32 name ''SetSecurityDescriptorControl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSecurityDescriptorDacl: Pointer;

function SetSecurityDescriptorDacl;
begin
GetProcedureAddress(_SetSecurityDescriptorDacl, advapi32, ''SetSecurityDescriptorDacl'');
asm
mov esp, ebp
pop ebp
jmp [_SetSecurityDescriptorDacl]
end;
end;
{$ELSE}
function SetSecurityDescriptorDacl; external advapi32 name ''SetSecurityDescriptorDacl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSecurityDescriptorDacl: Pointer;

function GetSecurityDescriptorDacl;
begin
GetProcedureAddress(_GetSecurityDescriptorDacl, advapi32, ''GetSecurityDescriptorDacl'');
asm
mov esp, ebp
pop ebp
jmp [_GetSecurityDescriptorDacl]
end;
end;
{$ELSE}
function GetSecurityDescriptorDacl; external advapi32 name ''GetSecurityDescriptorDacl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSecurityDescriptorSacl: Pointer;

function SetSecurityDescriptorSacl;
begin
GetProcedureAddress(_SetSecurityDescriptorSacl, advapi32, ''SetSecurityDescriptorSacl'');
asm
mov esp, ebp
pop ebp
jmp [_SetSecurityDescriptorSacl]
end;
end;
{$ELSE}
function SetSecurityDescriptorSacl; external advapi32 name ''SetSecurityDescriptorSacl'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSecurityDescriptorSacl: Pointer;

function GetSecurityDescriptorSacl;
begin
GetProcedureAddress(_GetSecurityDescriptorSacl, advapi32, ''GetSecurityDescriptorSacl'');
asm
mov esp, ebp
pop ebp
jmp [_GetSecurityDescriptorSacl]
end;
end;
{$ELSE}
function GetSecurityDescriptorSacl; external advapi32 name ''GetSecurityDescriptorSacl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSecurityDescriptorOwner: Pointer;

function SetSecurityDescriptorOwner;
begin
GetProcedureAddress(_SetSecurityDescriptorOwner, advapi32, ''SetSecurityDescriptorOwner'');
asm
mov esp, ebp
pop ebp
jmp [_SetSecurityDescriptorOwner]
end;
end;
{$ELSE}
function SetSecurityDescriptorOwner; external advapi32 name ''SetSecurityDescriptorOwner'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSecurityDescriptorOwner: Pointer;



function GetSecurityDescriptorOwner;
begin
GetProcedureAddress(_GetSecurityDescriptorOwner, advapi32, ''GetSecurityDescriptorOwner'');
asm
mov esp, ebp
pop ebp
jmp [_GetSecurityDescriptorOwner]
end;
end;
{$ELSE}
function GetSecurityDescriptorOwner; external advapi32 name ''GetSecurityDescriptorOwner'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSecurityDescriptorGroup: Pointer;

function SetSecurityDescriptorGroup;
begin
GetProcedureAddress(_SetSecurityDescriptorGroup, advapi32, ''SetSecurityDescriptorGroup'');
asm
mov esp, ebp
pop ebp
jmp [_SetSecurityDescriptorGroup]
end;
end;
{$ELSE}
function SetSecurityDescriptorGroup; external advapi32 name ''SetSecurityDescriptorGroup'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSecurityDescriptorGroup: Pointer;

function GetSecurityDescriptorGroup;
begin
GetProcedureAddress(_GetSecurityDescriptorGroup, advapi32, ''GetSecurityDescriptorGroup'');

asm
mov esp, ebp
pop ebp
jmp [_GetSecurityDescriptorGroup]
end;
end;
{$ELSE}
function GetSecurityDescriptorGroup; external advapi32 name ''GetSecurityDescriptorGroup'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSecurityDescriptorRMControl: Pointer;

function SetSecurityDescriptorRMControl;
begin
GetProcedureAddress(_SetSecurityDescriptorRMControl, advapi32, ''SetSecurityDescriptorRMControl'');
asm
mov esp, ebp
pop ebp
jmp [_SetSecurityDescriptorRMControl]
end;
end;
{$ELSE}
function SetSecurityDescriptorRMControl; external advapi32 name ''SetSecurityDescriptorRMControl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSecurityDescriptorRMControl: Pointer;

function GetSecurityDescriptorRMControl;
begin
GetProcedureAddress(_GetSecurityDescriptorRMControl, advapi32, ''GetSecurityDescriptorRMControl'');
asm
mov esp, ebp
pop ebp
jmp [_GetSecurityDescriptorRMControl]
end;
end;
{$ELSE}
function GetSecurityDescriptorRMControl; external advapi32 name ''GetSecurityDescriptorRMControl'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreatePrivateObjectSecurity: Pointer;

function CreatePrivateObjectSecurity;
begin
GetProcedureAddress(_CreatePrivateObjectSecurity, advapi32, ''CreatePrivateObjectSecurity'');
asm
mov esp, ebp
pop ebp
jmp [_CreatePrivateObjectSecurity]
end;
end;
{$ELSE}
function CreatePrivateObjectSecurity; external advapi32 name ''CreatePrivateObjectSecurity'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ConvertToAutoInheritPrObjSec: Pointer;

function ConvertToAutoInheritPrivateObjectSecurity;
begin
GetProcedureAddress(_ConvertToAutoInheritPrObjSec, advapi32, ''ConvertToAutoInheritPrivateObjectSecurity'');
asm
mov esp, ebp
pop ebp
jmp [_ConvertToAutoInheritPrObjSec]
end;
end;
{$ELSE}
function ConvertToAutoInheritPrivateObjectSecurity; external advapi32 name ''ConvertToAutoInheritPrivateObjectSecurity'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreatePrivateObjectSecurityEx: Pointer;

function CreatePrivateObjectSecurityEx;
begin
GetProcedureAddress(_CreatePrivateObjectSecurityEx, advapi32, ''CreatePrivateObjectSecurityEx'');
asm
mov esp, ebp
pop ebp
jmp [_CreatePrivateObjectSecurityEx]
end;
end;
{$ELSE}
function CreatePrivateObjectSecurityEx; external advapi32 name ''CreatePrivateObjectSecurityEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetPrivateObjectSecurity: Pointer;

function SetPrivateObjectSecurity;
begin
GetProcedureAddress(_SetPrivateObjectSecurity, advapi32, ''SetPrivateObjectSecurity'');
asm
mov esp, ebp
pop ebp
jmp [_SetPrivateObjectSecurity]
end;
end;
{$ELSE}
function SetPrivateObjectSecurity; external advapi32 name ''SetPrivateObjectSecurity'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetPrivateObjectSecurityEx: Pointer;

function SetPrivateObjectSecurityEx;
begin
GetProcedureAddress(_SetPrivateObjectSecurityEx, advapi32, ''SetPrivateObjectSecurityEx'');
asm
mov esp, ebp
pop ebp
jmp [_SetPrivateObjectSecurityEx]
end;
end;
{$ELSE}
function SetPrivateObjectSecurityEx; external advapi32 name ''SetPrivateObjectSecurityEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPrivateObjectSecurity: Pointer;

function GetPrivateObjectSecurity;
begin
GetProcedureAddress(_GetPrivateObjectSecurity, advapi32, ''GetPrivateObjectSecurity'');
asm
mov esp, ebp
pop ebp
jmp [_GetPrivateObjectSecurity]
end;
end;
{$ELSE}
function GetPrivateObjectSecurity; external advapi32 name ''GetPrivateObjectSecurity'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DestroyPrivateObjectSecurity: Pointer;



function DestroyPrivateObjectSecurity;
begin
GetProcedureAddress(_DestroyPrivateObjectSecurity, advapi32, ''DestroyPrivateObjectSecurity'');
asm
mov esp, ebp
pop ebp
jmp [_DestroyPrivateObjectSecurity]
end;
end;
{$ELSE}
function DestroyPrivateObjectSecurity; external advapi32 name ''DestroyPrivateObjectSecurity'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MakeSelfRelativeSD: Pointer;

function MakeSelfRelativeSD;
begin
GetProcedureAddress(_MakeSelfRelativeSD, advapi32, ''MakeSelfRelativeSD'');
asm
mov esp, ebp
pop ebp
jmp [_MakeSelfRelativeSD]
end;
end;
{$ELSE}
function MakeSelfRelativeSD; external advapi32 name ''MakeSelfRelativeSD'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MakeAbsoluteSD: Pointer;

function MakeAbsoluteSD;
begin
GetProcedureAddress(_MakeAbsoluteSD, advapi32, ''MakeAbsoluteSD'');
asm
mov esp, ebp
pop ebp
jmp [_MakeAbsoluteSD]
end;
end;
{$ELSE}
function MakeAbsoluteSD; external advapi32 name ''MakeAbsoluteSD'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MakeAbsoluteSD2: Pointer;

function MakeAbsoluteSD2;
begin
GetProcedureAddress(_MakeAbsoluteSD2, advapi32, ''MakeAbsoluteSD2'');
asm
mov esp, ebp
pop ebp
jmp [_MakeAbsoluteSD2]
end;
end;
{$ELSE}
function MakeAbsoluteSD2; external advapi32 name ''MakeAbsoluteSD2'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFileSecurityA: Pointer;

function SetFileSecurityA;
begin
GetProcedureAddress(_SetFileSecurityA, advapi32, ''SetFileSecurityA'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileSecurityA]
end;
end;
{$ELSE}
function SetFileSecurityA; external advapi32 name ''SetFileSecurityA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetFileSecurityW: Pointer;

function SetFileSecurityW;
begin
GetProcedureAddress(_SetFileSecurityW, advapi32, ''SetFileSecurityW'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileSecurityW]
end;
end;
{$ELSE}
function SetFileSecurityW; external advapi32 name ''SetFileSecurityW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetFileSecurity: Pointer;

function SetFileSecurity;
begin
GetProcedureAddress(_SetFileSecurity, advapi32, ''SetFileSecurityW'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileSecurity]
end;
end;
{$ELSE}
function SetFileSecurity; external advapi32 name ''SetFileSecurityW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetFileSecurity: Pointer;

function SetFileSecurity;
begin
GetProcedureAddress(_SetFileSecurity, advapi32, ''SetFileSecurityA'');
asm
mov esp, ebp
pop ebp
jmp [_SetFileSecurity]
end;
end;
{$ELSE}
function SetFileSecurity; external advapi32 name ''SetFileSecurityA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetFileSecurityA: Pointer;

function GetFileSecurityA;
begin
GetProcedureAddress(_GetFileSecurityA, advapi32, ''GetFileSecurityA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileSecurityA]
end;
end;
{$ELSE}
function GetFileSecurityA; external advapi32 name ''GetFileSecurityA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFileSecurityW: Pointer;

function GetFileSecurityW;
begin
GetProcedureAddress(_GetFileSecurityW, advapi32, ''GetFileSecurityW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileSecurityW]
end;
end;
{$ELSE}
function GetFileSecurityW; external advapi32 name ''GetFileSecurityW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetFileSecurity: Pointer;

function GetFileSecurity;
begin
GetProcedureAddress(_GetFileSecurity, advapi32, ''GetFileSecurityW'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileSecurity]
end;
end;
{$ELSE}
function GetFileSecurity; external advapi32 name ''GetFileSecurityW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetFileSecurity: Pointer;

function GetFileSecurity;
begin
GetProcedureAddress(_GetFileSecurity, advapi32, ''GetFileSecurityA'');
asm
mov esp, ebp
pop ebp
jmp [_GetFileSecurity]
end;
end;
{$ELSE}
function GetFileSecurity; external advapi32 name ''GetFileSecurityA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetKernelObjectSecurity: Pointer;

function SetKernelObjectSecurity;
begin
GetProcedureAddress(_SetKernelObjectSecurity, advapi32, ''SetKernelObjectSecurity'');
asm
mov esp, ebp
pop ebp
jmp [_SetKernelObjectSecurity]


end;
end;
{$ELSE}
function SetKernelObjectSecurity; external advapi32 name ''SetKernelObjectSecurity'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstChangeNotificationA: Pointer;

function FindFirstChangeNotificationA;
begin
GetProcedureAddress(_FindFirstChangeNotificationA, kernel32, ''FindFirstChangeNotificationA'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstChangeNotificationA]
end;
end;
{$ELSE}
function FindFirstChangeNotificationA; external kernel32 name ''FindFirstChangeNotificationA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstChangeNotificationW: Pointer;

function FindFirstChangeNotificationW;
begin
GetProcedureAddress(_FindFirstChangeNotificationW, kernel32, ''FindFirstChangeNotificationW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstChangeNotificationW]
end;
end;
{$ELSE}
function FindFirstChangeNotificationW; external kernel32 name ''FindFirstChangeNotificationW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstChangeNotification: Pointer;

function FindFirstChangeNotification;
begin
GetProcedureAddress(_FindFirstChangeNotification, kernel32, ''FindFirstChangeNotificationW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstChangeNotification]
end;
end;
{$ELSE}
function FindFirstChangeNotification; external kernel32 name ''FindFirstChangeNotificationW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstChangeNotification: Pointer;

function FindFirstChangeNotification;
begin
GetProcedureAddress(_FindFirstChangeNotification, kernel32, ''FindFirstChangeNotificationA'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstChangeNotification]
end;
end;
{$ELSE}
function FindFirstChangeNotification; external kernel32 name ''FindFirstChangeNotificationA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}


{$IFDEF DYNAMIC_LINK}
var
_FindNextChangeNotification: Pointer;

function FindNextChangeNotification;
begin
GetProcedureAddress(_FindNextChangeNotification, kernel32, ''FindNextChangeNotification'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextChangeNotification]
end;
end;
{$ELSE}
function FindNextChangeNotification; external kernel32 name ''FindNextChangeNotification'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindCloseChangeNotification: Pointer;

function FindCloseChangeNotification;
begin
GetProcedureAddress(_FindCloseChangeNotification, kernel32, ''FindCloseChangeNotification'');
asm
mov esp, ebp
pop ebp
jmp [_FindCloseChangeNotification]
end;
end;
{$ELSE}
function FindCloseChangeNotification; external kernel32 name ''FindCloseChangeNotification'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReadDirectoryChangesW: Pointer;

function ReadDirectoryChangesW;
begin
GetProcedureAddress(_ReadDirectoryChangesW, kernel32, ''ReadDirectoryChangesW'');
asm
mov esp, ebp
pop ebp
jmp [_ReadDirectoryChangesW]
end;
end;
{$ELSE}
function ReadDirectoryChangesW; external kernel32 name ''ReadDirectoryChangesW'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualLock: Pointer;

function VirtualLock;
begin
GetProcedureAddress(_VirtualLock, kernel32, ''VirtualLock'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualLock]
end;
end;
{$ELSE}
function VirtualLock; external kernel32 name ''VirtualLock'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VirtualUnlock: Pointer;

function VirtualUnlock;
begin
GetProcedureAddress(_VirtualUnlock, kernel32, ''VirtualUnlock'');
asm
mov esp, ebp
pop ebp
jmp [_VirtualUnlock]
end;
end;
{$ELSE}
function VirtualUnlock; external kernel32 name ''VirtualUnlock'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MapViewOfFileEx: Pointer;

function MapViewOfFileEx;
begin
GetProcedureAddress(_MapViewOfFileEx, kernel32, ''MapViewOfFileEx'');
asm
mov esp, ebp
pop ebp
jmp [_MapViewOfFileEx]
end;
end;
{$ELSE}
function MapViewOfFileEx; external kernel32 name ''MapViewOfFileEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetPriorityClass: Pointer;

function SetPriorityClass;
begin
GetProcedureAddress(_SetPriorityClass, kernel32, ''SetPriorityClass'');
asm
mov esp, ebp
pop ebp
jmp [_SetPriorityClass]
end;
end;
{$ELSE}
function SetPriorityClass; external kernel32 name ''SetPriorityClass'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPriorityClass: Pointer;

function GetPriorityClass;
begin
GetProcedureAddress(_GetPriorityClass, kernel32, ''GetPriorityClass'');
asm
mov esp, ebp

pop ebp
jmp [_GetPriorityClass]
end;
end;
{$ELSE}
function GetPriorityClass; external kernel32 name ''GetPriorityClass'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsBadReadPtr: Pointer;

function IsBadReadPtr;
begin
GetProcedureAddress(_IsBadReadPtr, kernel32, ''IsBadReadPtr'');
asm
mov esp, ebp
pop ebp
jmp [_IsBadReadPtr]
end;
end;
{$ELSE}
function IsBadReadPtr; external kernel32 name ''IsBadReadPtr'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsBadWritePtr: Pointer;

function IsBadWritePtr;
begin
GetProcedureAddress(_IsBadWritePtr, kernel32, ''IsBadWritePtr'');
asm
mov esp, ebp
pop ebp
jmp [_IsBadWritePtr]
end;
end;
{$ELSE}
function IsBadWritePtr; external kernel32 name ''IsBadWritePtr'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsBadHugeReadPtr: Pointer;

function IsBadHugeReadPtr;


begin
GetProcedureAddress(_IsBadHugeReadPtr, kernel32, ''IsBadHugeReadPtr'');
asm
mov esp, ebp
pop ebp
jmp [_IsBadHugeReadPtr]
end;
end;
{$ELSE}
function IsBadHugeReadPtr; external kernel32 name ''IsBadHugeReadPtr'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsBadHugeWritePtr: Pointer;

function IsBadHugeWritePtr;
begin
GetProcedureAddress(_IsBadHugeWritePtr, kernel32, ''IsBadHugeWritePtr'');
asm
mov esp, ebp
pop ebp
jmp [_IsBadHugeWritePtr]
end;
end;
{$ELSE}
function IsBadHugeWritePtr; external kernel32 name ''IsBadHugeWritePtr'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsBadCodePtr: Pointer;

function IsBadCodePtr;
begin
GetProcedureAddress(_IsBadCodePtr, kernel32, ''IsBadCodePtr'');
asm
mov esp, ebp
pop ebp
jmp [_IsBadCodePtr]
end;
end;
{$ELSE}
function IsBadCodePtr; external kernel32 name ''IsBadCodePtr'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsBadStringPtrA: Pointer;

function IsBadStringPtrA;
begin
GetProcedureAddress(_IsBadStringPtrA, kernel32, ''IsBadStringPtrA'');
asm
mov esp, ebp
pop ebp
jmp [_IsBadStringPtrA]
end;
end;
{$ELSE}
function IsBadStringPtrA; external kernel32 name ''IsBadStringPtrA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsBadStringPtrW: Pointer;

function IsBadStringPtrW;
begin
GetProcedureAddress(_IsBadStringPtrW, kernel32, ''IsBadStringPtrW'');
asm
mov esp, ebp
pop ebp
jmp [_IsBadStringPtrW]
end;
end;
{$ELSE}
function IsBadStringPtrW; external kernel32 name ''IsBadStringPtrW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_IsBadStringPtr: Pointer;

function IsBadStringPtr;
begin
GetProcedureAddress(_IsBadStringPtr, kernel32, ''IsBadStringPtrW'');
asm


mov esp, ebp
pop ebp
jmp [_IsBadStringPtr]
end;
end;
{$ELSE}
function IsBadStringPtr; external kernel32 name ''IsBadStringPtrW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_IsBadStringPtr: Pointer;

function IsBadStringPtr;
begin
GetProcedureAddress(_IsBadStringPtr, kernel32, ''IsBadStringPtrA'');
asm
mov esp, ebp
pop ebp
jmp [_IsBadStringPtr]
end;
end;
{$ELSE}
function IsBadStringPtr; external kernel32 name ''IsBadStringPtrA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_LookupAccountSidA: Pointer;

function LookupAccountSidA;
begin
GetProcedureAddress(_LookupAccountSidA, advapi32, ''LookupAccountSidA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupAccountSidA]
end;
end;
{$ELSE}
function LookupAccountSidA; external advapi32 name ''LookupAccountSidA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LookupAccountSidW: Pointer;

function LookupAccountSidW;
begin
GetProcedureAddress(_LookupAccountSidW, advapi32, ''LookupAccountSidW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupAccountSidW]
end;
end;
{$ELSE}
function LookupAccountSidW; external advapi32 name ''LookupAccountSidW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_LookupAccountSid: Pointer;

function LookupAccountSid;
begin
GetProcedureAddress(_LookupAccountSid, advapi32, ''LookupAccountSidW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupAccountSid]
end;
end;
{$ELSE}
function LookupAccountSid; external advapi32 name ''LookupAccountSidW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_LookupAccountSid: Pointer;

function LookupAccountSid;
begin
GetProcedureAddress(_LookupAccountSid, advapi32, ''LookupAccountSidA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupAccountSid]
end;
end;
{$ELSE}
function LookupAccountSid; external advapi32 name ''LookupAccountSidA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_LookupAccountNameA: Pointer;

function LookupAccountNameA;
begin
GetProcedureAddress(_LookupAccountNameA, advapi32, ''LookupAccountNameA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupAccountNameA]
end;
end;
{$ELSE}
function LookupAccountNameA; external advapi32 name ''LookupAccountNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LookupAccountNameW: Pointer;

function LookupAccountNameW;
begin
GetProcedureAddress(_LookupAccountNameW, advapi32, ''LookupAccountNameW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupAccountNameW]
end;
end;
{$ELSE}
function LookupAccountNameW; external advapi32 name ''LookupAccountNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}



{$IFDEF DYNAMIC_LINK}
var
_LookupAccountName: Pointer;

function LookupAccountName;
begin
GetProcedureAddress(_LookupAccountName, advapi32, ''LookupAccountNameW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupAccountName]
end;
end;
{$ELSE}
function LookupAccountName; external advapi32 name ''LookupAccountNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_LookupAccountName: Pointer;

function LookupAccountName;
begin
GetProcedureAddress(_LookupAccountName, advapi32, ''LookupAccountNameA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupAccountName]
end;
end;
{$ELSE}
function LookupAccountName; external advapi32 name ''LookupAccountNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeValueA: Pointer;

function LookupPrivilegeValueA;
begin
GetProcedureAddress(_LookupPrivilegeValueA, advapi32, ''LookupPrivilegeValueA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeValueA]
end;
end;
{$ELSE}
function LookupPrivilegeValueA; external advapi32 name ''LookupPrivilegeValueA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeValueW: Pointer;

function LookupPrivilegeValueW;
begin
GetProcedureAddress(_LookupPrivilegeValueW, advapi32, ''LookupPrivilegeValueW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeValueW]
end;
end;
{$ELSE}
function LookupPrivilegeValueW; external advapi32 name ''LookupPrivilegeValueW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeValue: Pointer;

function LookupPrivilegeValue;
begin
GetProcedureAddress(_LookupPrivilegeValue, advapi32, ''LookupPrivilegeValueW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeValue]
end;
end;
{$ELSE}
function LookupPrivilegeValue; external advapi32 name ''LookupPrivilegeValueW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeValue: Pointer;

function LookupPrivilegeValue;
begin
GetProcedureAddress(_LookupPrivilegeValue, advapi32, ''LookupPrivilegeValueA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeValue]
end;
end;
{$ELSE}
function LookupPrivilegeValue; external advapi32 name ''LookupPrivilegeValueA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeNameA: Pointer;

function LookupPrivilegeNameA;
begin
GetProcedureAddress(_LookupPrivilegeNameA, advapi32, ''LookupPrivilegeNameA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeNameA]
end;
end;
{$ELSE}
function LookupPrivilegeNameA; external advapi32 name ''LookupPrivilegeNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeNameW: Pointer;

function LookupPrivilegeNameW;
begin


GetProcedureAddress(_LookupPrivilegeNameW, advapi32, ''LookupPrivilegeNameW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeNameW]
end;
end;
{$ELSE}
function LookupPrivilegeNameW; external advapi32 name ''LookupPrivilegeNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeName: Pointer;

function LookupPrivilegeName;
begin
GetProcedureAddress(_LookupPrivilegeName, advapi32, ''LookupPrivilegeNameW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeName]
end;
end;
{$ELSE}
function LookupPrivilegeName; external advapi32 name ''LookupPrivilegeNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeName: Pointer;

function LookupPrivilegeName;
begin
GetProcedureAddress(_LookupPrivilegeName, advapi32, ''LookupPrivilegeNameA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeName]


end;
end;
{$ELSE}
function LookupPrivilegeName; external advapi32 name ''LookupPrivilegeNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeDisplayNameA: Pointer;

function LookupPrivilegeDisplayNameA;
begin
GetProcedureAddress(_LookupPrivilegeDisplayNameA, advapi32, ''LookupPrivilegeDisplayNameA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeDisplayNameA]
end;
end;
{$ELSE}
function LookupPrivilegeDisplayNameA; external advapi32 name ''LookupPrivilegeDisplayNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeDisplayNameW: Pointer;

function LookupPrivilegeDisplayNameW;
begin
GetProcedureAddress(_LookupPrivilegeDisplayNameW, advapi32, ''LookupPrivilegeDisplayNameW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeDisplayNameW]
end;
end;
{$ELSE}
function LookupPrivilegeDisplayNameW; external advapi32 name ''LookupPrivilegeDisplayNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeDisplayName: Pointer;

function LookupPrivilegeDisplayName;
begin
GetProcedureAddress(_LookupPrivilegeDisplayName, advapi32, ''LookupPrivilegeDisplayNameW'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeDisplayName]
end;
end;
{$ELSE}
function LookupPrivilegeDisplayName; external advapi32 name ''LookupPrivilegeDisplayNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_LookupPrivilegeDisplayName: Pointer;

function LookupPrivilegeDisplayName;
begin
GetProcedureAddress(_LookupPrivilegeDisplayName, advapi32, ''LookupPrivilegeDisplayNameA'');
asm
mov esp, ebp
pop ebp
jmp [_LookupPrivilegeDisplayName]
end;
end;
{$ELSE}
function LookupPrivilegeDisplayName; external advapi32 name ''LookupPrivilegeDisplayNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}


var
_AllocateLocallyUniqueId: Pointer;

function AllocateLocallyUniqueId;
begin
GetProcedureAddress(_AllocateLocallyUniqueId, advapi32, ''AllocateLocallyUniqueId'');
asm
mov esp, ebp
pop ebp
jmp [_AllocateLocallyUniqueId]
end;
end;
{$ELSE}
function AllocateLocallyUniqueId; external advapi32 name ''AllocateLocallyUniqueId'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BuildCommDCBA: Pointer;

function BuildCommDCBA;
begin
GetProcedureAddress(_BuildCommDCBA, kernel32, ''BuildCommDCBA'');
asm
mov esp, ebp
pop ebp
jmp [_BuildCommDCBA]
end;
end;
{$ELSE}
function BuildCommDCBA; external kernel32 name ''BuildCommDCBA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BuildCommDCBW: Pointer;

function BuildCommDCBW;
begin
GetProcedureAddress(_BuildCommDCBW, kernel32, ''BuildCommDCBW'');
asm
mov esp, ebp
pop ebp


jmp [_BuildCommDCBW]
end;
end;
{$ELSE}
function BuildCommDCBW; external kernel32 name ''BuildCommDCBW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_BuildCommDCB: Pointer;

function BuildCommDCB;
begin
GetProcedureAddress(_BuildCommDCB, kernel32, ''BuildCommDCBW'');
asm
mov esp, ebp
pop ebp
jmp [_BuildCommDCB]
end;
end;
{$ELSE}
function BuildCommDCB; external kernel32 name ''BuildCommDCBW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_BuildCommDCB: Pointer;

function BuildCommDCB;
begin
GetProcedureAddress(_BuildCommDCB, kernel32, ''BuildCommDCBA'');
asm
mov esp, ebp
pop ebp
jmp [_BuildCommDCB]
end;
end;
{$ELSE}
function BuildCommDCB; external kernel32 name ''BuildCommDCBA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_BuildCommDCBAndTimeoutsA: Pointer;



function BuildCommDCBAndTimeoutsA;
begin
GetProcedureAddress(_BuildCommDCBAndTimeoutsA, kernel32, ''BuildCommDCBAndTimeoutsA'');
asm
mov esp, ebp
pop ebp
jmp [_BuildCommDCBAndTimeoutsA]
end;
end;
{$ELSE}
function BuildCommDCBAndTimeoutsA; external kernel32 name ''BuildCommDCBAndTimeoutsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BuildCommDCBAndTimeoutsW: Pointer;

function BuildCommDCBAndTimeoutsW;
begin
GetProcedureAddress(_BuildCommDCBAndTimeoutsW, kernel32, ''BuildCommDCBAndTimeoutsW'');
asm
mov esp, ebp
pop ebp
jmp [_BuildCommDCBAndTimeoutsW]
end;
end;
{$ELSE}
function BuildCommDCBAndTimeoutsW; external kernel32 name ''BuildCommDCBAndTimeoutsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_BuildCommDCBAndTimeouts: Pointer;

function BuildCommDCBAndTimeouts;
begin
GetProcedureAddress(_BuildCommDCBAndTimeouts, kernel32, ''BuildCommDCBAndTimeoutsW'');
asm
mov esp, ebp
pop ebp
jmp [_BuildCommDCBAndTimeouts]
end;
end;
{$ELSE}
function BuildCommDCBAndTimeouts; external kernel32 name ''BuildCommDCBAndTimeoutsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_BuildCommDCBAndTimeouts: Pointer;

function BuildCommDCBAndTimeouts;
begin
GetProcedureAddress(_BuildCommDCBAndTimeouts, kernel32, ''BuildCommDCBAndTimeoutsA'');
asm
mov esp, ebp
pop ebp
jmp [_BuildCommDCBAndTimeouts]
end;
end;
{$ELSE}
function BuildCommDCBAndTimeouts; external kernel32 name ''BuildCommDCBAndTimeoutsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CommConfigDialogA: Pointer;

function CommConfigDialogA;
begin
GetProcedureAddress(_CommConfigDialogA, kernel32, ''CommConfigDialogA'');
asm
mov esp, ebp
pop ebp
jmp [_CommConfigDialogA]
end;
end;
{$ELSE}
function CommConfigDialogA; external kernel32 name ''CommConfigDialogA'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CommConfigDialogW: Pointer;

function CommConfigDialogW;
begin
GetProcedureAddress(_CommConfigDialogW, kernel32, ''CommConfigDialogW'');
asm
mov esp, ebp
pop ebp
jmp [_CommConfigDialogW]
end;
end;
{$ELSE}
function CommConfigDialogW; external kernel32 name ''CommConfigDialogW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CommConfigDialog: Pointer;

function CommConfigDialog;
begin
GetProcedureAddress(_CommConfigDialog, kernel32, ''CommConfigDialogW'');
asm
mov esp, ebp
pop ebp
jmp [_CommConfigDialog]
end;
end;
{$ELSE}
function CommConfigDialog; external kernel32 name ''CommConfigDialogW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CommConfigDialog: Pointer;

function CommConfigDialog;
begin
GetProcedureAddress(_CommConfigDialog, kernel32, ''CommConfigDialogA'');


asm
mov esp, ebp
pop ebp
jmp [_CommConfigDialog]
end;
end;
{$ELSE}
function CommConfigDialog; external kernel32 name ''CommConfigDialogA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetDefaultCommConfigA: Pointer;

function GetDefaultCommConfigA;
begin
GetProcedureAddress(_GetDefaultCommConfigA, kernel32, ''GetDefaultCommConfigA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDefaultCommConfigA]
end;
end;
{$ELSE}
function GetDefaultCommConfigA; external kernel32 name ''GetDefaultCommConfigA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDefaultCommConfigW: Pointer;

function GetDefaultCommConfigW;
begin
GetProcedureAddress(_GetDefaultCommConfigW, kernel32, ''GetDefaultCommConfigW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDefaultCommConfigW]
end;
end;
{$ELSE}
function GetDefaultCommConfigW; external kernel32 name ''GetDefaultCommConfigW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetDefaultCommConfig: Pointer;

function GetDefaultCommConfig;
begin
GetProcedureAddress(_GetDefaultCommConfig, kernel32, ''GetDefaultCommConfigW'');
asm
mov esp, ebp
pop ebp
jmp [_GetDefaultCommConfig]
end;
end;
{$ELSE}
function GetDefaultCommConfig; external kernel32 name ''GetDefaultCommConfigW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetDefaultCommConfig: Pointer;

function GetDefaultCommConfig;
begin
GetProcedureAddress(_GetDefaultCommConfig, kernel32, ''GetDefaultCommConfigA'');
asm
mov esp, ebp
pop ebp
jmp [_GetDefaultCommConfig]
end;
end;
{$ELSE}
function GetDefaultCommConfig; external kernel32 name ''GetDefaultCommConfigA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetDefaultCommConfigA: Pointer;

function SetDefaultCommConfigA;


begin
GetProcedureAddress(_SetDefaultCommConfigA, kernel32, ''SetDefaultCommConfigA'');
asm
mov esp, ebp
pop ebp
jmp [_SetDefaultCommConfigA]
end;
end;
{$ELSE}
function SetDefaultCommConfigA; external kernel32 name ''SetDefaultCommConfigA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetDefaultCommConfigW: Pointer;

function SetDefaultCommConfigW;
begin
GetProcedureAddress(_SetDefaultCommConfigW, kernel32, ''SetDefaultCommConfigW'');
asm
mov esp, ebp
pop ebp
jmp [_SetDefaultCommConfigW]
end;
end;
{$ELSE}
function SetDefaultCommConfigW; external kernel32 name ''SetDefaultCommConfigW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetDefaultCommConfig: Pointer;

function SetDefaultCommConfig;
begin
GetProcedureAddress(_SetDefaultCommConfig, kernel32, ''SetDefaultCommConfigW'');
asm
mov esp, ebp
pop ebp
jmp [_SetDefaultCommConfig]
end;
end;
{$ELSE}
function SetDefaultCommConfig; external kernel32 name ''SetDefaultCommConfigW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetDefaultCommConfig: Pointer;

function SetDefaultCommConfig;
begin
GetProcedureAddress(_SetDefaultCommConfig, kernel32, ''SetDefaultCommConfigA'');
asm
mov esp, ebp
pop ebp
jmp [_SetDefaultCommConfig]
end;
end;
{$ELSE}
function SetDefaultCommConfig; external kernel32 name ''SetDefaultCommConfigA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetComputerNameA: Pointer;

function GetComputerNameA;
begin
GetProcedureAddress(_GetComputerNameA, kernel32, ''GetComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetComputerNameA]
end;
end;
{$ELSE}
function GetComputerNameA; external kernel32 name ''GetComputerNameA'';
{$ENDIF DYNAMIC_LINK}



{$IFDEF DYNAMIC_LINK}
var
_GetComputerNameW: Pointer;

function GetComputerNameW;
begin
GetProcedureAddress(_GetComputerNameW, kernel32, ''GetComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetComputerNameW]
end;
end;
{$ELSE}
function GetComputerNameW; external kernel32 name ''GetComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetComputerName: Pointer;

function GetComputerName;
begin
GetProcedureAddress(_GetComputerName, kernel32, ''GetComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetComputerName]
end;
end;
{$ELSE}
function GetComputerName; external kernel32 name ''GetComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetComputerName: Pointer;

function GetComputerName;
begin
GetProcedureAddress(_GetComputerName, kernel32, ''GetComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetComputerName]
end;
end;
{$ELSE}
function GetComputerName; external kernel32 name ''GetComputerNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetComputerNameA: Pointer;

function SetComputerNameA;
begin
GetProcedureAddress(_SetComputerNameA, kernel32, ''SetComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_SetComputerNameA]
end;
end;
{$ELSE}
function SetComputerNameA; external kernel32 name ''SetComputerNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetComputerNameW: Pointer;

function SetComputerNameW;
begin
GetProcedureAddress(_SetComputerNameW, kernel32, ''SetComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_SetComputerNameW]
end;
end;
{$ELSE}
function SetComputerNameW; external kernel32 name ''SetComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}


{$IFDEF DYNAMIC_LINK}
var
_SetComputerName: Pointer;

function SetComputerName;
begin
GetProcedureAddress(_SetComputerName, kernel32, ''SetComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_SetComputerName]
end;
end;
{$ELSE}
function SetComputerName; external kernel32 name ''SetComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetComputerName: Pointer;

function SetComputerName;
begin
GetProcedureAddress(_SetComputerName, kernel32, ''SetComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_SetComputerName]
end;
end;
{$ELSE}
function SetComputerName; external kernel32 name ''SetComputerNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetComputerNameExA: Pointer;

function GetComputerNameExA;
begin
GetProcedureAddress(_GetComputerNameExA, kernel32, ''GetComputerNameExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetComputerNameExA]
end;
end;
{$ELSE}
function GetComputerNameExA; external kernel32 name ''GetComputerNameExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetComputerNameExW: Pointer;

function GetComputerNameExW;
begin
GetProcedureAddress(_GetComputerNameExW, kernel32, ''GetComputerNameExW'');
asm
mov esp, ebp
pop ebp
jmp [_GetComputerNameExW]
end;
end;
{$ELSE}
function GetComputerNameExW; external kernel32 name ''GetComputerNameExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetComputerNameEx: Pointer;

function GetComputerNameEx;
begin
GetProcedureAddress(_GetComputerNameEx, kernel32, ''GetComputerNameExW'');
asm
mov esp, ebp
pop ebp
jmp [_GetComputerNameEx]
end;
end;
{$ELSE}
function GetComputerNameEx; external kernel32 name ''GetComputerNameExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetComputerNameEx: Pointer;

function GetComputerNameEx;
begin
GetProcedureAddress(_GetComputerNameEx, kernel32, ''GetComputerNameExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetComputerNameEx]
end;
end;
{$ELSE}
function GetComputerNameEx; external kernel32 name ''GetComputerNameExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetComputerNameExA: Pointer;

function SetComputerNameExA;
begin
GetProcedureAddress(_SetComputerNameExA, kernel32, ''SetComputerNameExA'');
asm
mov esp, ebp
pop ebp
jmp [_SetComputerNameExA]
end;
end;
{$ELSE}
function SetComputerNameExA; external kernel32 name ''SetComputerNameExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetComputerNameExW: Pointer;

function SetComputerNameExW;
begin
GetProcedureAddress(_SetComputerNameExW, kernel32, ''SetComputerNameExW'');


asm
mov esp, ebp
pop ebp
jmp [_SetComputerNameExW]
end;
end;
{$ELSE}
function SetComputerNameExW; external kernel32 name ''SetComputerNameExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetComputerNameEx: Pointer;

function SetComputerNameEx;
begin
GetProcedureAddress(_SetComputerNameEx, kernel32, ''SetComputerNameExW'');
asm
mov esp, ebp
pop ebp
jmp [_SetComputerNameEx]
end;
end;
{$ELSE}
function SetComputerNameEx; external kernel32 name ''SetComputerNameExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetComputerNameEx: Pointer;

function SetComputerNameEx;
begin
GetProcedureAddress(_SetComputerNameEx, kernel32, ''SetComputerNameExA'');
asm
mov esp, ebp
pop ebp
jmp [_SetComputerNameEx]
end;
end;
{$ELSE}
function SetComputerNameEx; external kernel32 name ''SetComputerNameExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AddLocalAlternateComputerNameA: Pointer;

function AddLocalAlternateComputerNameA;
begin
GetProcedureAddress(_AddLocalAlternateComputerNameA, kernel32, ''AddLocalAlternateComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_AddLocalAlternateComputerNameA]
end;
end;
{$ELSE}
function AddLocalAlternateComputerNameA; external kernel32 name ''AddLocalAlternateComputerNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddLocalAlternateComputerNameW: Pointer;

function AddLocalAlternateComputerNameW;
begin
GetProcedureAddress(_AddLocalAlternateComputerNameW, kernel32, ''AddLocalAlternateComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_AddLocalAlternateComputerNameW]
end;
end;
{$ELSE}
function AddLocalAlternateComputerNameW; external kernel32 name ''AddLocalAlternateComputerNameW'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_AddLocalAlternateComputerName: Pointer;

function AddLocalAlternateComputerName;
begin
GetProcedureAddress(_AddLocalAlternateComputerName, kernel32, ''AddLocalAlternateComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_AddLocalAlternateComputerName]
end;
end;
{$ELSE}
function AddLocalAlternateComputerName; external kernel32 name ''AddLocalAlternateComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_AddLocalAlternateComputerName: Pointer;

function AddLocalAlternateComputerName;
begin
GetProcedureAddress(_AddLocalAlternateComputerName, kernel32, ''AddLocalAlternateComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_AddLocalAlternateComputerName]
end;
end;
{$ELSE}
function AddLocalAlternateComputerName; external kernel32 name ''AddLocalAlternateComputerNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}



{$IFDEF DYNAMIC_LINK}
var
_RemoveLocalAlternateCompNameA: Pointer;

function RemoveLocalAlternateComputerNameA;
begin
GetProcedureAddress(_RemoveLocalAlternateCompNameA, kernel32, ''RemoveLocalAlternateComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveLocalAlternateCompNameA]
end;
end;
{$ELSE}
function RemoveLocalAlternateComputerNameA; external kernel32 name ''RemoveLocalAlternateComputerNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RemoveLocalAlternateCompNameW: Pointer;

function RemoveLocalAlternateComputerNameW;
begin
GetProcedureAddress(_RemoveLocalAlternateCompNameW, kernel32, ''RemoveLocalAlternateComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveLocalAlternateCompNameW]
end;
end;
{$ELSE}
function RemoveLocalAlternateComputerNameW; external kernel32 name ''RemoveLocalAlternateComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_RemoveLocalAlternateCompName: Pointer;

function RemoveLocalAlternateComputerName;
begin
GetProcedureAddress(_RemoveLocalAlternateCompName, kernel32, ''RemoveLocalAlternateComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveLocalAlternateCompName]
end;
end;
{$ELSE}
function RemoveLocalAlternateComputerName; external kernel32 name ''RemoveLocalAlternateComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_RemoveLocalAlternateCompName: Pointer;

function RemoveLocalAlternateComputerName;
begin
GetProcedureAddress(_RemoveLocalAlternateCompName, kernel32, ''RemoveLocalAlternateComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveLocalAlternateCompName]
end;
end;
{$ELSE}
function RemoveLocalAlternateComputerName; external kernel32 name ''RemoveLocalAlternateComputerNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}


{$IFDEF DYNAMIC_LINK}
var
_SetLocalPrimaryComputerNameA: Pointer;

function SetLocalPrimaryComputerNameA;
begin
GetProcedureAddress(_SetLocalPrimaryComputerNameA, kernel32, ''SetLocalPrimaryComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_SetLocalPrimaryComputerNameA]
end;
end;
{$ELSE}
function SetLocalPrimaryComputerNameA; external kernel32 name ''SetLocalPrimaryComputerNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetLocalPrimaryComputerNameW: Pointer;

function SetLocalPrimaryComputerNameW;
begin
GetProcedureAddress(_SetLocalPrimaryComputerNameW, kernel32, ''SetLocalPrimaryComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_SetLocalPrimaryComputerNameW]
end;
end;
{$ELSE}
function SetLocalPrimaryComputerNameW; external kernel32 name ''SetLocalPrimaryComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetLocalPrimaryComputerName: Pointer;

function SetLocalPrimaryComputerName;
begin
GetProcedureAddress(_SetLocalPrimaryComputerName, kernel32, ''SetLocalPrimaryComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_SetLocalPrimaryComputerName]
end;
end;
{$ELSE}
function SetLocalPrimaryComputerName; external kernel32 name ''SetLocalPrimaryComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetLocalPrimaryComputerName: Pointer;

function SetLocalPrimaryComputerName;
begin
GetProcedureAddress(_SetLocalPrimaryComputerName, kernel32, ''SetLocalPrimaryComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_SetLocalPrimaryComputerName]
end;
end;
{$ELSE}
function SetLocalPrimaryComputerName; external kernel32 name ''SetLocalPrimaryComputerNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_EnumerateLocalComputerNamesA: Pointer;

function EnumerateLocalComputerNamesA;
begin
GetProcedureAddress(_EnumerateLocalComputerNamesA, kernel32, ''EnumerateLocalComputerNamesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumerateLocalComputerNamesA]
end;
end;
{$ELSE}
function EnumerateLocalComputerNamesA; external kernel32 name ''EnumerateLocalComputerNamesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumerateLocalComputerNamesW: Pointer;

function EnumerateLocalComputerNamesW;
begin
GetProcedureAddress(_EnumerateLocalComputerNamesW, kernel32, ''EnumerateLocalComputerNamesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumerateLocalComputerNamesW]
end;
end;
{$ELSE}
function EnumerateLocalComputerNamesW; external kernel32 name ''EnumerateLocalComputerNamesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EnumerateLocalComputerNames: Pointer;

function EnumerateLocalComputerNames;
begin
GetProcedureAddress(_EnumerateLocalComputerNames, kernel32, ''EnumerateLocalComputerNamesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumerateLocalComputerNames]
end;
end;
{$ELSE}
function EnumerateLocalComputerNames; external kernel32 name ''EnumerateLocalComputerNamesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EnumerateLocalComputerNames: Pointer;

function EnumerateLocalComputerNames;
begin
GetProcedureAddress(_EnumerateLocalComputerNames, kernel32, ''EnumerateLocalComputerNamesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumerateLocalComputerNames]
end;
end;
{$ELSE}
function EnumerateLocalComputerNames; external kernel32 name ''EnumerateLocalComputerNamesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_DnsHostnameToComputerNameA: Pointer;

function DnsHostnameToComputerNameA;
begin
GetProcedureAddress(_DnsHostnameToComputerNameA, kernel32, ''DnsHostnameToComputerNameA'');


asm
mov esp, ebp
pop ebp
jmp [_DnsHostnameToComputerNameA]
end;
end;
{$ELSE}
function DnsHostnameToComputerNameA; external kernel32 name ''DnsHostnameToComputerNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DnsHostnameToComputerNameW: Pointer;

function DnsHostnameToComputerNameW;
begin
GetProcedureAddress(_DnsHostnameToComputerNameW, kernel32, ''DnsHostnameToComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_DnsHostnameToComputerNameW]
end;
end;
{$ELSE}
function DnsHostnameToComputerNameW; external kernel32 name ''DnsHostnameToComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_DnsHostnameToComputerName: Pointer;

function DnsHostnameToComputerName;
begin
GetProcedureAddress(_DnsHostnameToComputerName, kernel32, ''DnsHostnameToComputerNameW'');
asm
mov esp, ebp
pop ebp
jmp [_DnsHostnameToComputerName]

end;
end;
{$ELSE}
function DnsHostnameToComputerName; external kernel32 name ''DnsHostnameToComputerNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_DnsHostnameToComputerName: Pointer;

function DnsHostnameToComputerName;
begin
GetProcedureAddress(_DnsHostnameToComputerName, kernel32, ''DnsHostnameToComputerNameA'');
asm
mov esp, ebp
pop ebp
jmp [_DnsHostnameToComputerName]
end;
end;
{$ELSE}
function DnsHostnameToComputerName; external kernel32 name ''DnsHostnameToComputerNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetUserNameA: Pointer;

function GetUserNameA;
begin
GetProcedureAddress(_GetUserNameA, advapi32, ''GetUserNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetUserNameA]
end;
end;
{$ELSE}
function GetUserNameA; external advapi32 name ''GetUserNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}

var
_GetUserNameW: Pointer;

function GetUserNameW;
begin
GetProcedureAddress(_GetUserNameW, advapi32, ''GetUserNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetUserNameW]
end;
end;
{$ELSE}
function GetUserNameW; external advapi32 name ''GetUserNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetUserName: Pointer;

function GetUserName;
begin
GetProcedureAddress(_GetUserName, advapi32, ''GetUserNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetUserName]
end;
end;
{$ELSE}
function GetUserName; external advapi32 name ''GetUserNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetUserName: Pointer;

function GetUserName;
begin
GetProcedureAddress(_GetUserName, advapi32, ''GetUserNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetUserName]
end;
end;
{$ELSE}
function GetUserName; external advapi32 name ''GetUserNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_LogonUserA: Pointer;

function LogonUserA;
begin
GetProcedureAddress(_LogonUserA, advapi32, ''LogonUserA'');
asm
mov esp, ebp
pop ebp
jmp [_LogonUserA]
end;
end;
{$ELSE}
function LogonUserA; external advapi32 name ''LogonUserA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LogonUserW: Pointer;

function LogonUserW;
begin
GetProcedureAddress(_LogonUserW, advapi32, ''LogonUserW'');
asm
mov esp, ebp
pop ebp
jmp [_LogonUserW]
end;
end;
{$ELSE}
function LogonUserW; external advapi32 name ''LogonUserW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_LogonUser: Pointer;

function LogonUser;
begin
GetProcedureAddress(_LogonUser, advapi32, ''LogonUserW'');
asm
mov esp, ebp
pop ebp
jmp [_LogonUser]
end;
end;
{$ELSE}
function LogonUser; external advapi32 name ''LogonUserW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_LogonUser: Pointer;

function LogonUser;
begin
GetProcedureAddress(_LogonUser, advapi32, ''LogonUserA'');
asm
mov esp, ebp
pop ebp
jmp [_LogonUser]
end;
end;
{$ELSE}
function LogonUser; external advapi32 name ''LogonUserA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_LogonUserExA: Pointer;

function LogonUserExA;
begin
GetProcedureAddress(_LogonUserExA, advapi32, ''LogonUserExA'');
asm
mov esp, ebp
pop ebp
jmp [_LogonUserExA]
end;
end;
{$ELSE}
function LogonUserExA; external advapi32 name ''LogonUserExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LogonUserExW: Pointer;

function LogonUserExW;
begin
GetProcedureAddress(_LogonUserExW, advapi32, ''LogonUserExW'');


asm
mov esp, ebp
pop ebp
jmp [_LogonUserExW]
end;
end;
{$ELSE}
function LogonUserExW; external advapi32 name ''LogonUserExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_LogonUserEx: Pointer;

function LogonUserEx;
begin
GetProcedureAddress(_LogonUserEx, advapi32, ''LogonUserExW'');
asm
mov esp, ebp
pop ebp
jmp [_LogonUserEx]
end;
end;
{$ELSE}
function LogonUserEx; external advapi32 name ''LogonUserExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_LogonUserEx: Pointer;

function LogonUserEx;
begin
GetProcedureAddress(_LogonUserEx, advapi32, ''LogonUserExA'');
asm
mov esp, ebp
pop ebp
jmp [_LogonUserEx]
end;
end;
{$ELSE}
function LogonUserEx; external advapi32 name ''LogonUserExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ImpersonateLoggedOnUser: Pointer;

function ImpersonateLoggedOnUser;
begin
GetProcedureAddress(_ImpersonateLoggedOnUser, advapi32, ''ImpersonateLoggedOnUser'');
asm
mov esp, ebp
pop ebp
jmp [_ImpersonateLoggedOnUser]
end;
end;
{$ELSE}
function ImpersonateLoggedOnUser; external advapi32 name ''ImpersonateLoggedOnUser'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcessAsUserA: Pointer;

function CreateProcessAsUserA;
begin
GetProcedureAddress(_CreateProcessAsUserA, advapi32, ''CreateProcessAsUserA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcessAsUserA]
end;
end;
{$ELSE}
function CreateProcessAsUserA; external advapi32 name ''CreateProcessAsUserA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcessAsUserW: Pointer;

function CreateProcessAsUserW;
begin
GetProcedureAddress(_CreateProcessAsUserW, advapi32, ''CreateProcessAsUserW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcessAsUserW]
end;
end;
{$ELSE}
function CreateProcessAsUserW; external advapi32 name ''CreateProcessAsUserW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcessAsUser: Pointer;

function CreateProcessAsUser;
begin
GetProcedureAddress(_CreateProcessAsUser, advapi32, ''CreateProcessAsUserW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcessAsUser]
end;
end;
{$ELSE}
function CreateProcessAsUser; external advapi32 name ''CreateProcessAsUserW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcessAsUser: Pointer;

function CreateProcessAsUser;
begin
GetProcedureAddress(_CreateProcessAsUser, advapi32, ''CreateProcessAsUserA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcessAsUser]
end;
end;
{$ELSE}
function CreateProcessAsUser; external advapi32 name ''CreateProcessAsUserA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcessWithLogonW: Pointer;

function CreateProcessWithLogonW;
begin
GetProcedureAddress(_CreateProcessWithLogonW, advapi32, ''CreateProcessWithLogonW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcessWithLogonW]
end;
end;
{$ELSE}
function CreateProcessWithLogonW; external advapi32 name ''CreateProcessWithLogonW'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateProcessWithTokenW: Pointer;

function CreateProcessWithTokenW;
begin
GetProcedureAddress(_CreateProcessWithTokenW, advapi32, ''CreateProcessWithTokenW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateProcessWithTokenW]
end;
end;
{$ELSE}
function CreateProcessWithTokenW; external advapi32 name ''CreateProcessWithTokenW'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ImpersonateAnonymousToken: Pointer;

function ImpersonateAnonymousToken;

begin
GetProcedureAddress(_ImpersonateAnonymousToken, advapi32, ''ImpersonateAnonymousToken'');
asm
mov esp, ebp
pop ebp
jmp [_ImpersonateAnonymousToken]
end;
end;
{$ELSE}
function ImpersonateAnonymousToken; external advapi32 name ''ImpersonateAnonymousToken'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DuplicateTokenEx: Pointer;

function DuplicateTokenEx;
begin
GetProcedureAddress(_DuplicateTokenEx, advapi32, ''DuplicateTokenEx'');
asm
mov esp, ebp
pop ebp
jmp [_DuplicateTokenEx]
end;
end;
{$ELSE}
function DuplicateTokenEx; external advapi32 name ''DuplicateTokenEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateRestrictedToken: Pointer;

function CreateRestrictedToken;
begin
GetProcedureAddress(_CreateRestrictedToken, advapi32, ''CreateRestrictedToken'');
asm
mov esp, ebp
pop ebp
jmp [_CreateRestrictedToken]


end;
end;
{$ELSE}
function CreateRestrictedToken; external advapi32 name ''CreateRestrictedToken'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsTokenRestricted: Pointer;

function IsTokenRestricted;
begin
GetProcedureAddress(_IsTokenRestricted, advapi32, ''IsTokenRestricted'');
asm
mov esp, ebp
pop ebp
jmp [_IsTokenRestricted]
end;
end;
{$ELSE}
function IsTokenRestricted; external advapi32 name ''IsTokenRestricted'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CheckTokenMembership: Pointer;

function CheckTokenMembership;
begin
GetProcedureAddress(_CheckTokenMembership, advapi32, ''CheckTokenMembership'');
asm
mov esp, ebp
pop ebp
jmp [_CheckTokenMembership]
end;
end;
{$ELSE}
function CheckTokenMembership; external advapi32 name ''CheckTokenMembership'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsTokenUntrusted: Pointer;

function IsTokenUntrusted;
begin
GetProcedureAddress(_IsTokenUntrusted, advapi32, ''IsTokenUntrusted'');
asm
mov esp, ebp
pop ebp
jmp [_IsTokenUntrusted]
end;
end;
{$ELSE}
function IsTokenUntrusted; external advapi32 name ''IsTokenUntrusted'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RegisterWaitForSingleObject: Pointer;

function RegisterWaitForSingleObject;
begin
GetProcedureAddress(_RegisterWaitForSingleObject, kernel32, ''RegisterWaitForSingleObject'');
asm
mov esp, ebp
pop ebp
jmp [_RegisterWaitForSingleObject]
end;
end;
{$ELSE}
function RegisterWaitForSingleObject; external kernel32 name ''RegisterWaitForSingleObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RegisterWaitForSingleObjectEx: Pointer;

function RegisterWaitForSingleObjectEx;
begin
GetProcedureAddress(_RegisterWaitForSingleObjectEx, kernel32, ''RegisterWaitForSingleObjectEx'');


asm
mov esp, ebp
pop ebp
jmp [_RegisterWaitForSingleObjectEx]
end;
end;
{$ELSE}
function RegisterWaitForSingleObjectEx; external kernel32 name ''RegisterWaitForSingleObjectEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UnregisterWait: Pointer;

function UnregisterWait;
begin
GetProcedureAddress(_UnregisterWait, kernel32, ''UnregisterWait'');
asm
mov esp, ebp
pop ebp
jmp [_UnregisterWait]
end;
end;
{$ELSE}
function UnregisterWait; external kernel32 name ''UnregisterWait'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UnregisterWaitEx: Pointer;

function UnregisterWaitEx;
begin
GetProcedureAddress(_UnregisterWaitEx, kernel32, ''UnregisterWaitEx'');
asm
mov esp, ebp
pop ebp
jmp [_UnregisterWaitEx]
end;
end;
{$ELSE}
function UnregisterWaitEx; external kernel32 name ''UnregisterWaitEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_QueueUserWorkItem: Pointer;

function QueueUserWorkItem;
begin
GetProcedureAddress(_QueueUserWorkItem, kernel32, ''QueueUserWorkItem'');
asm
mov esp, ebp
pop ebp
jmp [_QueueUserWorkItem]
end;
end;
{$ELSE}
function QueueUserWorkItem; external kernel32 name ''QueueUserWorkItem'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BindIoCompletionCallback: Pointer;

function BindIoCompletionCallback;
begin
GetProcedureAddress(_BindIoCompletionCallback, kernel32, ''BindIoCompletionCallback'');
asm
mov esp, ebp
pop ebp
jmp [_BindIoCompletionCallback]
end;
end;
{$ELSE}
function BindIoCompletionCallback; external kernel32 name ''BindIoCompletionCallback'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateTimerQueue: Pointer;

function CreateTimerQueue;
begin
GetProcedureAddress(_CreateTimerQueue, kernel32, ''CreateTimerQueue'');


asm
mov esp, ebp
pop ebp
jmp [_CreateTimerQueue]
end;
end;
{$ELSE}
function CreateTimerQueue; external kernel32 name ''CreateTimerQueue'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateTimerQueueTimer: Pointer;

function CreateTimerQueueTimer;
begin
GetProcedureAddress(_CreateTimerQueueTimer, kernel32, ''CreateTimerQueueTimer'');
asm
mov esp, ebp
pop ebp
jmp [_CreateTimerQueueTimer]
end;
end;
{$ELSE}
function CreateTimerQueueTimer; external kernel32 name ''CreateTimerQueueTimer'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ChangeTimerQueueTimer: Pointer;

function ChangeTimerQueueTimer;
begin
GetProcedureAddress(_ChangeTimerQueueTimer, kernel32, ''ChangeTimerQueueTimer'');
asm
mov esp, ebp
pop ebp
jmp [_ChangeTimerQueueTimer]
end;
end;
{$ELSE}
function ChangeTimerQueueTimer; external kernel32 name ''ChangeTimerQueueTimer'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteTimerQueueTimer: Pointer;

function DeleteTimerQueueTimer;
begin
GetProcedureAddress(_DeleteTimerQueueTimer, kernel32, ''DeleteTimerQueueTimer'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteTimerQueueTimer]
end;
end;
{$ELSE}
function DeleteTimerQueueTimer; external kernel32 name ''DeleteTimerQueueTimer'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteTimerQueueEx: Pointer;

function DeleteTimerQueueEx;
begin
GetProcedureAddress(_DeleteTimerQueueEx, kernel32, ''DeleteTimerQueueEx'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteTimerQueueEx]
end;
end;
{$ELSE}
function DeleteTimerQueueEx; external kernel32 name ''DeleteTimerQueueEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetTimerQueueTimer: Pointer;

function SetTimerQueueTimer;
begin
GetProcedureAddress(_SetTimerQueueTimer, kernel32, ''SetTimerQueueTimer'');


asm
mov esp, ebp
pop ebp
jmp [_SetTimerQueueTimer]
end;
end;
{$ELSE}
function SetTimerQueueTimer; external kernel32 name ''SetTimerQueueTimer'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CancelTimerQueueTimer: Pointer;

function CancelTimerQueueTimer;
begin
GetProcedureAddress(_CancelTimerQueueTimer, kernel32, ''CancelTimerQueueTimer'');
asm
mov esp, ebp
pop ebp
jmp [_CancelTimerQueueTimer]
end;
end;
{$ELSE}
function CancelTimerQueueTimer; external kernel32 name ''CancelTimerQueueTimer'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteTimerQueue: Pointer;

function DeleteTimerQueue;
begin
GetProcedureAddress(_DeleteTimerQueue, kernel32, ''DeleteTimerQueue'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteTimerQueue]
end;
end;
{$ELSE}
function DeleteTimerQueue; external kernel32 name ''DeleteTimerQueue'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentHwProfileA: Pointer;

function GetCurrentHwProfileA;
begin
GetProcedureAddress(_GetCurrentHwProfileA, advapi32, ''GetCurrentHwProfileA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentHwProfileA]
end;
end;
{$ELSE}
function GetCurrentHwProfileA; external advapi32 name ''GetCurrentHwProfileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentHwProfileW: Pointer;

function GetCurrentHwProfileW;
begin
GetProcedureAddress(_GetCurrentHwProfileW, advapi32, ''GetCurrentHwProfileW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentHwProfileW]
end;
end;
{$ELSE}
function GetCurrentHwProfileW; external advapi32 name ''GetCurrentHwProfileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentHwProfile: Pointer;

function GetCurrentHwProfile;
begin
GetProcedureAddress(_GetCurrentHwProfile, advapi32, ''GetCurrentHwProfileW'');

asm
mov esp, ebp
pop ebp
jmp [_GetCurrentHwProfile]
end;
end;
{$ELSE}
function GetCurrentHwProfile; external advapi32 name ''GetCurrentHwProfileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentHwProfile: Pointer;

function GetCurrentHwProfile;
begin
GetProcedureAddress(_GetCurrentHwProfile, advapi32, ''GetCurrentHwProfileA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentHwProfile]
end;
end;
{$ELSE}
function GetCurrentHwProfile; external advapi32 name ''GetCurrentHwProfileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_QueryPerformanceCounter: Pointer;

function QueryPerformanceCounter;
begin
GetProcedureAddress(_QueryPerformanceCounter, kernel32, ''QueryPerformanceCounter'');
asm
mov esp, ebp
pop ebp
jmp [_QueryPerformanceCounter]
end;
end;
{$ELSE}
function QueryPerformanceCounter; external kernel32 name ''QueryPerformanceCounter'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_QueryPerformanceFrequency: Pointer;

function QueryPerformanceFrequency;
begin
GetProcedureAddress(_QueryPerformanceFrequency, kernel32, ''QueryPerformanceFrequency'');
asm
mov esp, ebp
pop ebp
jmp [_QueryPerformanceFrequency]
end;
end;
{$ELSE}
function QueryPerformanceFrequency; external kernel32 name ''QueryPerformanceFrequency'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetVersionExA: Pointer;

function GetVersionExA;
begin
GetProcedureAddress(_GetVersionExA, kernel32, ''GetVersionExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVersionExA]
end;
end;
{$ELSE}
function GetVersionExA; external kernel32 name ''GetVersionExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetVersionExW: Pointer;

function GetVersionExW;
begin
GetProcedureAddress(_GetVersionExW, kernel32, ''GetVersionExW'');

asm
mov esp, ebp
pop ebp
jmp [_GetVersionExW]
end;
end;
{$ELSE}
function GetVersionExW; external kernel32 name ''GetVersionExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetVersionEx: Pointer;

function GetVersionEx;
begin
GetProcedureAddress(_GetVersionEx, kernel32, ''GetVersionExW'');
asm
mov esp, ebp
pop ebp
jmp [_GetVersionEx]
end;
end;
{$ELSE}
function GetVersionEx; external kernel32 name ''GetVersionExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetVersionEx: Pointer;

function GetVersionEx;
begin
GetProcedureAddress(_GetVersionEx, kernel32, ''GetVersionExA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVersionEx]
end;
end;
{$ELSE}
function GetVersionEx; external kernel32 name ''GetVersionExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var

_VerifyVersionInfoA: Pointer;

function VerifyVersionInfoA;
begin
GetProcedureAddress(_VerifyVersionInfoA, kernel32, ''VerifyVersionInfoA'');
asm
mov esp, ebp
pop ebp
jmp [_VerifyVersionInfoA]
end;
end;
{$ELSE}
function VerifyVersionInfoA; external kernel32 name ''VerifyVersionInfoA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_VerifyVersionInfoW: Pointer;

function VerifyVersionInfoW;
begin
GetProcedureAddress(_VerifyVersionInfoW, kernel32, ''VerifyVersionInfoW'');
asm
mov esp, ebp
pop ebp
jmp [_VerifyVersionInfoW]
end;
end;
{$ELSE}
function VerifyVersionInfoW; external kernel32 name ''VerifyVersionInfoW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_VerifyVersionInfo: Pointer;

function VerifyVersionInfo;
begin
GetProcedureAddress(_VerifyVersionInfo, kernel32, ''VerifyVersionInfoW'');
asm
mov esp, ebp


pop ebp
jmp [_VerifyVersionInfo]
end;
end;
{$ELSE}
function VerifyVersionInfo; external kernel32 name ''VerifyVersionInfoW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_VerifyVersionInfo: Pointer;

function VerifyVersionInfo;
begin
GetProcedureAddress(_VerifyVersionInfo, kernel32, ''VerifyVersionInfoA'');
asm
mov esp, ebp
pop ebp
jmp [_VerifyVersionInfo]
end;
end;
{$ELSE}
function VerifyVersionInfo; external kernel32 name ''VerifyVersionInfoA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemPowerStatus: Pointer;

function GetSystemPowerStatus;
begin
GetProcedureAddress(_GetSystemPowerStatus, kernel32, ''GetSystemPowerStatus'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemPowerStatus]
end;
end;
{$ELSE}
function GetSystemPowerStatus; external kernel32 name ''GetSystemPowerStatus'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSystemPowerState: Pointer;

function SetSystemPowerState;
begin
GetProcedureAddress(_SetSystemPowerState, kernel32, ''SetSystemPowerState'');
asm
mov esp, ebp
pop ebp
jmp [_SetSystemPowerState]
end;
end;
{$ELSE}
function SetSystemPowerState; external kernel32 name ''SetSystemPowerState'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AllocateUserPhysicalPages: Pointer;

function AllocateUserPhysicalPages;
begin
GetProcedureAddress(_AllocateUserPhysicalPages, kernel32, ''AllocateUserPhysicalPages'');
asm
mov esp, ebp
pop ebp
jmp [_AllocateUserPhysicalPages]
end;
end;
{$ELSE}
function AllocateUserPhysicalPages; external kernel32 name ''AllocateUserPhysicalPages'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FreeUserPhysicalPages: Pointer;

function FreeUserPhysicalPages;
begin
GetProcedureAddress(_FreeUserPhysicalPages, kernel32, ''FreeUserPhysicalPages'');
asm
mov esp, ebp
pop ebp
jmp [_FreeUserPhysicalPages]
end;
end;
{$ELSE}
function FreeUserPhysicalPages; external kernel32 name ''FreeUserPhysicalPages'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MapUserPhysicalPages: Pointer;

function MapUserPhysicalPages;
begin
GetProcedureAddress(_MapUserPhysicalPages, kernel32, ''MapUserPhysicalPages'');
asm
mov esp, ebp
pop ebp
jmp [_MapUserPhysicalPages]
end;
end;
{$ELSE}
function MapUserPhysicalPages; external kernel32 name ''MapUserPhysicalPages'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MapUserPhysicalPagesScatter: Pointer;

function MapUserPhysicalPagesScatter;
begin
GetProcedureAddress(_MapUserPhysicalPagesScatter, kernel32, ''MapUserPhysicalPagesScatter'');
asm
mov esp, ebp
pop ebp
jmp [_MapUserPhysicalPagesScatter]
end;
end;
{$ELSE}
function MapUserPhysicalPagesScatter; external kernel32 name ''MapUserPhysicalPagesScatter'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateJobObjectA: Pointer;

function CreateJobObjectA;
begin
GetProcedureAddress(_CreateJobObjectA, kernel32, ''CreateJobObjectA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateJobObjectA]
end;
end;
{$ELSE}
function CreateJobObjectA; external kernel32 name ''CreateJobObjectA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateJobObjectW: Pointer;

function CreateJobObjectW;
begin
GetProcedureAddress(_CreateJobObjectW, kernel32, ''CreateJobObjectW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateJobObjectW]
end;
end;
{$ELSE}
function CreateJobObjectW; external kernel32 name ''CreateJobObjectW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateJobObject: Pointer;

function CreateJobObject;
begin
GetProcedureAddress(_CreateJobObject, kernel32, ''CreateJobObjectW'');


asm
mov esp, ebp
pop ebp
jmp [_CreateJobObject]
end;
end;
{$ELSE}
function CreateJobObject; external kernel32 name ''CreateJobObjectW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateJobObject: Pointer;

function CreateJobObject;
begin
GetProcedureAddress(_CreateJobObject, kernel32, ''CreateJobObjectA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateJobObject]
end;
end;
{$ELSE}
function CreateJobObject; external kernel32 name ''CreateJobObjectA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_OpenJobObjectA: Pointer;

function OpenJobObjectA;
begin
GetProcedureAddress(_OpenJobObjectA, kernel32, ''OpenJobObjectA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenJobObjectA]
end;
end;
{$ELSE}
function OpenJobObjectA; external kernel32 name ''OpenJobObjectA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}

var
_OpenJobObjectW: Pointer;

function OpenJobObjectW;
begin
GetProcedureAddress(_OpenJobObjectW, kernel32, ''OpenJobObjectW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenJobObjectW]
end;
end;
{$ELSE}
function OpenJobObjectW; external kernel32 name ''OpenJobObjectW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_OpenJobObject: Pointer;

function OpenJobObject;
begin
GetProcedureAddress(_OpenJobObject, kernel32, ''OpenJobObjectW'');
asm
mov esp, ebp
pop ebp
jmp [_OpenJobObject]
end;
end;
{$ELSE}
function OpenJobObject; external kernel32 name ''OpenJobObjectW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_OpenJobObject: Pointer;

function OpenJobObject;
begin
GetProcedureAddress(_OpenJobObject, kernel32, ''OpenJobObjectA'');
asm
mov esp, ebp
pop ebp
jmp [_OpenJobObject]

end;
end;
{$ELSE}
function OpenJobObject; external kernel32 name ''OpenJobObjectA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AssignProcessToJobObject: Pointer;

function AssignProcessToJobObject;
begin
GetProcedureAddress(_AssignProcessToJobObject, kernel32, ''AssignProcessToJobObject'');
asm
mov esp, ebp
pop ebp
jmp [_AssignProcessToJobObject]
end;
end;
{$ELSE}
function AssignProcessToJobObject; external kernel32 name ''AssignProcessToJobObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TerminateJobObject: Pointer;

function TerminateJobObject;
begin
GetProcedureAddress(_TerminateJobObject, kernel32, ''TerminateJobObject'');
asm
mov esp, ebp
pop ebp
jmp [_TerminateJobObject]
end;
end;
{$ELSE}
function TerminateJobObject; external kernel32 name ''TerminateJobObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}

var
_QueryInformationJobObject: Pointer;

function QueryInformationJobObject;
begin
GetProcedureAddress(_QueryInformationJobObject, kernel32, ''QueryInformationJobObject'');
asm
mov esp, ebp
pop ebp
jmp [_QueryInformationJobObject]
end;
end;
{$ELSE}
function QueryInformationJobObject; external kernel32 name ''QueryInformationJobObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetInformationJobObject: Pointer;

function SetInformationJobObject;
begin
GetProcedureAddress(_SetInformationJobObject, kernel32, ''SetInformationJobObject'');
asm
mov esp, ebp
pop ebp
jmp [_SetInformationJobObject]
end;
end;
{$ELSE}
function SetInformationJobObject; external kernel32 name ''SetInformationJobObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsProcessInJob: Pointer;

function IsProcessInJob;
begin
GetProcedureAddress(_IsProcessInJob, kernel32, ''IsProcessInJob'');
asm
mov esp, ebp
pop ebp
jmp [_IsProcessInJob]
end;
end;
{$ELSE}
function IsProcessInJob; external kernel32 name ''IsProcessInJob'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateJobSet: Pointer;

function CreateJobSet;
begin
GetProcedureAddress(_CreateJobSet, kernel32, ''CreateJobSet'');
asm
mov esp, ebp
pop ebp
jmp [_CreateJobSet]
end;
end;
{$ELSE}
function CreateJobSet; external kernel32 name ''CreateJobSet'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddVectoredExceptionHandler: Pointer;

function AddVectoredExceptionHandler;
begin
GetProcedureAddress(_AddVectoredExceptionHandler, kernel32, ''AddVectoredExceptionHandler'');
asm
mov esp, ebp
pop ebp
jmp [_AddVectoredExceptionHandler]
end;
end;
{$ELSE}
function AddVectoredExceptionHandler; external kernel32 name ''AddVectoredExceptionHandler'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RemoveVectoredExceptionHandler: Pointer;

function RemoveVectoredExceptionHandler;
begin
GetProcedureAddress(_RemoveVectoredExceptionHandler, kernel32, ''RemoveVectoredExceptionHandler'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveVectoredExceptionHandler]
end;
end;
{$ELSE}
function RemoveVectoredExceptionHandler; external kernel32 name ''RemoveVectoredExceptionHandler'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstVolumeA: Pointer;

function FindFirstVolumeA;
begin
GetProcedureAddress(_FindFirstVolumeA, kernel32, ''FindFirstVolumeA'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstVolumeA]
end;
end;
{$ELSE}
function FindFirstVolumeA; external kernel32 name ''FindFirstVolumeA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstVolumeW: Pointer;

function FindFirstVolumeW;


begin
GetProcedureAddress(_FindFirstVolumeW, kernel32, ''FindFirstVolumeW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstVolumeW]
end;
end;
{$ELSE}
function FindFirstVolumeW; external kernel32 name ''FindFirstVolumeW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstVolume: Pointer;

function FindFirstVolume;
begin
GetProcedureAddress(_FindFirstVolume, kernel32, ''FindFirstVolumeW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstVolume]
end;
end;
{$ELSE}
function FindFirstVolume; external kernel32 name ''FindFirstVolumeW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstVolume: Pointer;

function FindFirstVolume;
begin
GetProcedureAddress(_FindFirstVolume, kernel32, ''FindFirstVolumeA'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstVolume]
end;
end;
{$ELSE}
function FindFirstVolume; external kernel32 name ''FindFirstVolumeA'';


{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindNextVolumeA: Pointer;

function FindNextVolumeA;
begin
GetProcedureAddress(_FindNextVolumeA, kernel32, ''FindNextVolumeA'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextVolumeA]
end;
end;
{$ELSE}
function FindNextVolumeA; external kernel32 name ''FindNextVolumeA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindNextVolumeW: Pointer;

function FindNextVolumeW;
begin
GetProcedureAddress(_FindNextVolumeW, kernel32, ''FindNextVolumeW'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextVolumeW]
end;
end;
{$ELSE}
function FindNextVolumeW; external kernel32 name ''FindNextVolumeW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindNextVolume: Pointer;

function FindNextVolume;
begin
GetProcedureAddress(_FindNextVolume, kernel32, ''FindNextVolumeW'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextVolume]
end;
end;
{$ELSE}
function FindNextVolume; external kernel32 name ''FindNextVolumeW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindNextVolume: Pointer;

function FindNextVolume;
begin
GetProcedureAddress(_FindNextVolume, kernel32, ''FindNextVolumeA'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextVolume]
end;
end;
{$ELSE}
function FindNextVolume; external kernel32 name ''FindNextVolumeA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindVolumeClose: Pointer;

function FindVolumeClose;
begin
GetProcedureAddress(_FindVolumeClose, kernel32, ''FindVolumeClose'');
asm
mov esp, ebp
pop ebp
jmp [_FindVolumeClose]
end;
end;
{$ELSE}
function FindVolumeClose; external kernel32 name ''FindVolumeClose'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}

var
_FindFirstVolumeMountPointA: Pointer;

function FindFirstVolumeMountPointA;
begin
GetProcedureAddress(_FindFirstVolumeMountPointA, kernel32, ''FindFirstVolumeMountPointA'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstVolumeMountPointA]
end;
end;
{$ELSE}
function FindFirstVolumeMountPointA; external kernel32 name ''FindFirstVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstVolumeMountPointW: Pointer;

function FindFirstVolumeMountPointW;
begin
GetProcedureAddress(_FindFirstVolumeMountPointW, kernel32, ''FindFirstVolumeMountPointW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstVolumeMountPointW]
end;
end;
{$ELSE}
function FindFirstVolumeMountPointW; external kernel32 name ''FindFirstVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstVolumeMountPoint: Pointer;

function FindFirstVolumeMountPoint;


begin
GetProcedureAddress(_FindFirstVolumeMountPoint, kernel32, ''FindFirstVolumeMountPointW'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstVolumeMountPoint]
end;
end;
{$ELSE}
function FindFirstVolumeMountPoint; external kernel32 name ''FindFirstVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindFirstVolumeMountPoint: Pointer;

function FindFirstVolumeMountPoint;
begin
GetProcedureAddress(_FindFirstVolumeMountPoint, kernel32, ''FindFirstVolumeMountPointA'');
asm
mov esp, ebp
pop ebp
jmp [_FindFirstVolumeMountPoint]
end;
end;
{$ELSE}
function FindFirstVolumeMountPoint; external kernel32 name ''FindFirstVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindNextVolumeMountPointA: Pointer;

function FindNextVolumeMountPointA;
begin
GetProcedureAddress(_FindNextVolumeMountPointA, kernel32, ''FindNextVolumeMountPointA'');

asm
mov esp, ebp
pop ebp
jmp [_FindNextVolumeMountPointA]
end;
end;
{$ELSE}
function FindNextVolumeMountPointA; external kernel32 name ''FindNextVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindNextVolumeMountPointW: Pointer;

function FindNextVolumeMountPointW;
begin
GetProcedureAddress(_FindNextVolumeMountPointW, kernel32, ''FindNextVolumeMountPointW'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextVolumeMountPointW]
end;
end;
{$ELSE}
function FindNextVolumeMountPointW; external kernel32 name ''FindNextVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindNextVolumeMountPoint: Pointer;

function FindNextVolumeMountPoint;
begin
GetProcedureAddress(_FindNextVolumeMountPoint, kernel32, ''FindNextVolumeMountPointW'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextVolumeMountPoint]

end;
end;
{$ELSE}
function FindNextVolumeMountPoint; external kernel32 name ''FindNextVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindNextVolumeMountPoint: Pointer;

function FindNextVolumeMountPoint;
begin
GetProcedureAddress(_FindNextVolumeMountPoint, kernel32, ''FindNextVolumeMountPointA'');
asm
mov esp, ebp
pop ebp
jmp [_FindNextVolumeMountPoint]
end;
end;
{$ELSE}
function FindNextVolumeMountPoint; external kernel32 name ''FindNextVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindVolumeMountPointClose: Pointer;

function FindVolumeMountPointClose;
begin
GetProcedureAddress(_FindVolumeMountPointClose, kernel32, ''FindVolumeMountPointClose'');
asm
mov esp, ebp
pop ebp
jmp [_FindVolumeMountPointClose]
end;
end;
{$ELSE}
function FindVolumeMountPointClose; external kernel32 name ''FindVolumeMountPointClose'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetVolumeMountPointA: Pointer;

function SetVolumeMountPointA;
begin
GetProcedureAddress(_SetVolumeMountPointA, kernel32, ''SetVolumeMountPointA'');
asm
mov esp, ebp
pop ebp
jmp [_SetVolumeMountPointA]
end;
end;
{$ELSE}
function SetVolumeMountPointA; external kernel32 name ''SetVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetVolumeMountPointW: Pointer;

function SetVolumeMountPointW;
begin
GetProcedureAddress(_SetVolumeMountPointW, kernel32, ''SetVolumeMountPointW'');
asm
mov esp, ebp
pop ebp
jmp [_SetVolumeMountPointW]
end;
end;
{$ELSE}
function SetVolumeMountPointW; external kernel32 name ''SetVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetVolumeMountPoint: Pointer;

function SetVolumeMountPoint;
begin
GetProcedureAddress(_SetVolumeMountPoint, kernel32, ''SetVolumeMountPointW'');


asm
mov esp, ebp
pop ebp
jmp [_SetVolumeMountPoint]
end;
end;
{$ELSE}
function SetVolumeMountPoint; external kernel32 name ''SetVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetVolumeMountPoint: Pointer;

function SetVolumeMountPoint;
begin
GetProcedureAddress(_SetVolumeMountPoint, kernel32, ''SetVolumeMountPointA'');
asm
mov esp, ebp
pop ebp
jmp [_SetVolumeMountPoint]
end;
end;
{$ELSE}
function SetVolumeMountPoint; external kernel32 name ''SetVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_DeleteVolumeMountPointA: Pointer;

function DeleteVolumeMountPointA;
begin
GetProcedureAddress(_DeleteVolumeMountPointA, kernel32, ''DeleteVolumeMountPointA'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteVolumeMountPointA]
end;
end;
{$ELSE}
function DeleteVolumeMountPointA; external kernel32 name ''DeleteVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteVolumeMountPointW: Pointer;

function DeleteVolumeMountPointW;
begin
GetProcedureAddress(_DeleteVolumeMountPointW, kernel32, ''DeleteVolumeMountPointW'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteVolumeMountPointW]
end;
end;
{$ELSE}
function DeleteVolumeMountPointW; external kernel32 name ''DeleteVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_DeleteVolumeMountPoint: Pointer;

function DeleteVolumeMountPoint;
begin
GetProcedureAddress(_DeleteVolumeMountPoint, kernel32, ''DeleteVolumeMountPointW'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteVolumeMountPoint]
end;
end;
{$ELSE}
function DeleteVolumeMountPoint; external kernel32 name ''DeleteVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_DeleteVolumeMountPoint: Pointer;


function DeleteVolumeMountPoint;
begin
GetProcedureAddress(_DeleteVolumeMountPoint, kernel32, ''DeleteVolumeMountPointA'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteVolumeMountPoint]
end;
end;
{$ELSE}
function DeleteVolumeMountPoint; external kernel32 name ''DeleteVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumeNameForVolMountPointA: Pointer;

function GetVolumeNameForVolumeMountPointA;
begin
GetProcedureAddress(_GetVolumeNameForVolMountPointA, kernel32, ''GetVolumeNameForVolumeMountPointA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumeNameForVolMountPointA]
end;
end;
{$ELSE}
function GetVolumeNameForVolumeMountPointA; external kernel32 name ''GetVolumeNameForVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumeNameForVolMountPointW: Pointer;

function GetVolumeNameForVolumeMountPointW;
begin
GetProcedureAddress(_GetVolumeNameForVolMountPointW, kernel32, ''GetVolumeNameForVolumeMountPointW'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumeNameForVolMountPointW]
end;
end;
{$ELSE}
function GetVolumeNameForVolumeMountPointW; external kernel32 name ''GetVolumeNameForVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumeNameForVolMountPoint: Pointer;

function GetVolumeNameForVolumeMountPoint;
begin
GetProcedureAddress(_GetVolumeNameForVolMountPoint, kernel32, ''GetVolumeNameForVolumeMountPointW'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumeNameForVolMountPoint]
end;
end;
{$ELSE}
function GetVolumeNameForVolumeMountPoint; external kernel32 name ''GetVolumeNameForVolumeMountPointW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumeNameForVolMountPoint: Pointer;

function GetVolumeNameForVolumeMountPoint;

begin
GetProcedureAddress(_GetVolumeNameForVolMountPoint, kernel32, ''GetVolumeNameForVolumeMountPointA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumeNameForVolMountPoint]
end;
end;
{$ELSE}
function GetVolumeNameForVolumeMountPoint; external kernel32 name ''GetVolumeNameForVolumeMountPointA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumePathNameA: Pointer;

function GetVolumePathNameA;
begin
GetProcedureAddress(_GetVolumePathNameA, kernel32, ''GetVolumePathNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumePathNameA]
end;
end;
{$ELSE}
function GetVolumePathNameA; external kernel32 name ''GetVolumePathNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumePathNameW: Pointer;

function GetVolumePathNameW;
begin
GetProcedureAddress(_GetVolumePathNameW, kernel32, ''GetVolumePathNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumePathNameW]
end;
end;
{$ELSE}
function GetVolumePathNameW; external kernel32 name ''GetVolumePathNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumePathName: Pointer;

function GetVolumePathName;
begin
GetProcedureAddress(_GetVolumePathName, kernel32, ''GetVolumePathNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumePathName]
end;
end;
{$ELSE}
function GetVolumePathName; external kernel32 name ''GetVolumePathNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumePathName: Pointer;

function GetVolumePathName;
begin
GetProcedureAddress(_GetVolumePathName, kernel32, ''GetVolumePathNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumePathName]
end;
end;
{$ELSE}
function GetVolumePathName; external kernel32 name ''GetVolumePathNameA'';
{$ENDIF DYNAMIC_LINK}

{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumePathNamesForVolNameA: Pointer;

function GetVolumePathNamesForVolumeNameA;
begin
GetProcedureAddress(_GetVolumePathNamesForVolNameA, kernel32, ''GetVolumePathNamesForVolumeNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumePathNamesForVolNameA]
end;
end;
{$ELSE}
function GetVolumePathNamesForVolumeNameA; external kernel32 name ''GetVolumePathNamesForVolumeNameA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumePathNamesForVolNameW: Pointer;

function GetVolumePathNamesForVolumeNameW;
begin
GetProcedureAddress(_GetVolumePathNamesForVolNameW, kernel32, ''GetVolumePathNamesForVolumeNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumePathNamesForVolNameW]
end;
end;
{$ELSE}
function GetVolumePathNamesForVolumeNameW; external kernel32 name ''GetVolumePathNamesForVolumeNameW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumePathNamesForVolName: Pointer;

function GetVolumePathNamesForVolumeName;
begin
GetProcedureAddress(_GetVolumePathNamesForVolName, kernel32, ''GetVolumePathNamesForVolumeNameW'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumePathNamesForVolName]
end;
end;
{$ELSE}
function GetVolumePathNamesForVolumeName; external kernel32 name ''GetVolumePathNamesForVolumeNameW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetVolumePathNamesForVolName: Pointer;

function GetVolumePathNamesForVolumeName;
begin
GetProcedureAddress(_GetVolumePathNamesForVolName, kernel32, ''GetVolumePathNamesForVolumeNameA'');
asm
mov esp, ebp
pop ebp
jmp [_GetVolumePathNamesForVolName]
end;
end;
{$ELSE}
function GetVolumePathNamesForVolumeName; external kernel32 name ''GetVolumePathNamesForVolumeNameA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateActCtxA: Pointer;

function CreateActCtxA;
begin
GetProcedureAddress(_CreateActCtxA, kernel32, ''CreateActCtxA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateActCtxA]
end;
end;
{$ELSE}
function CreateActCtxA; external kernel32 name ''CreateActCtxA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateActCtxW: Pointer;

function CreateActCtxW;
begin
GetProcedureAddress(_CreateActCtxW, kernel32, ''CreateActCtxW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateActCtxW]
end;
end;
{$ELSE}
function CreateActCtxW; external kernel32 name ''CreateActCtxW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateActCtx: Pointer;

function CreateActCtx;
begin
GetProcedureAddress(_CreateActCtx, kernel32, ''CreateActCtxW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateActCtx]
end;
end;
{$ELSE}
function CreateActCtx; external kernel32 name ''CreateActCtxW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateActCtx: Pointer;

function CreateActCtx;
begin
GetProcedureAddress(_CreateActCtx, kernel32, ''CreateActCtxA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateActCtx]
end;
end;
{$ELSE}
function CreateActCtx; external kernel32 name ''CreateActCtxA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AddRefActCtx: Pointer;

procedure AddRefActCtx;
begin
GetProcedureAddress(_AddRefActCtx, kernel32, ''AddRefActCtx'');
asm
mov esp, ebp
pop ebp
jmp [_AddRefActCtx]
end;
end;
{$ELSE}
procedure AddRefActCtx; external kernel32 name ''AddRefActCtx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ReleaseActCtx: Pointer;

procedure ReleaseActCtx;
begin
GetProcedureAddress(_ReleaseActCtx, kernel32, ''ReleaseActCtx'');
asm
mov esp, ebp
pop ebp
jmp [_ReleaseActCtx]
end;
end;
{$ELSE}
procedure ReleaseActCtx; external kernel32 name ''ReleaseActCtx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ZombifyActCtx: Pointer;

function ZombifyActCtx;
begin
GetProcedureAddress(_ZombifyActCtx, kernel32, ''ZombifyActCtx'');
asm
mov esp, ebp
pop ebp
jmp [_ZombifyActCtx]
end;
end;
{$ELSE}
function ZombifyActCtx; external kernel32 name ''ZombifyActCtx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ActivateActCtx: Pointer;

function ActivateActCtx;
begin
GetProcedureAddress(_ActivateActCtx, kernel32, ''ActivateActCtx'');
asm
mov esp, ebp
pop ebp
jmp [_ActivateActCtx]
end;
end;
{$ELSE}
function ActivateActCtx; external kernel32 name ''ActivateActCtx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeactivateActCtx: Pointer;

function DeactivateActCtx;
begin
GetProcedureAddress(_DeactivateActCtx, kernel32, ''DeactivateActCtx'');
asm
mov esp, ebp
pop ebp
jmp [_DeactivateActCtx]
end;
end;
{$ELSE}
function DeactivateActCtx; external kernel32 name ''DeactivateActCtx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentActCtx: Pointer;

function GetCurrentActCtx;
begin
GetProcedureAddress(_GetCurrentActCtx, kernel32, ''GetCurrentActCtx'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentActCtx]
end;
end;
{$ELSE}
function GetCurrentActCtx; external kernel32 name ''GetCurrentActCtx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindActCtxSectionStringA: Pointer;

function FindActCtxSectionStringA;
begin
GetProcedureAddress(_FindActCtxSectionStringA, kernel32, ''FindActCtxSectionStringA'');
asm
mov esp, ebp
pop ebp
jmp [_FindActCtxSectionStringA]
end;
end;
{$ELSE}
function FindActCtxSectionStringA; external kernel32 name ''FindActCtxSectionStringA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FindActCtxSectionStringW: Pointer;

function FindActCtxSectionStringW;
begin
GetProcedureAddress(_FindActCtxSectionStringW, kernel32, ''FindActCtxSectionStringW'');
asm
mov esp, ebp
pop ebp
jmp [_FindActCtxSectionStringW]
end;
end;
{$ELSE}
function FindActCtxSectionStringW; external kernel32 name ''FindActCtxSectionStringW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_FindActCtxSectionString: Pointer;

function FindActCtxSectionString;
begin
GetProcedureAddress(_FindActCtxSectionString, kernel32, ''FindActCtxSectionStringW'');
asm
mov esp, ebp
pop ebp
jmp [_FindActCtxSectionString]
end;
end;
{$ELSE}
function FindActCtxSectionString; external kernel32 name ''FindActCtxSectionStringW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_FindActCtxSectionString: Pointer;

function FindActCtxSectionString;
begin
GetProcedureAddress(_FindActCtxSectionString, kernel32, ''FindActCtxSectionStringA'');
asm
mov esp, ebp
pop ebp
jmp [_FindActCtxSectionString]
end;
end;
{$ELSE}
function FindActCtxSectionString; external kernel32 name ''FindActCtxSectionStringA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_FindActCtxSectionGuid: Pointer;

function FindActCtxSectionGuid;
begin
GetProcedureAddress(_FindActCtxSectionGuid, kernel32, ''FindActCtxSectionGuid'');
asm
mov esp, ebp
pop ebp
jmp [_FindActCtxSectionGuid]
end;
end;
{$ELSE}
function FindActCtxSectionGuid; external kernel32 name ''FindActCtxSectionGuid'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_QueryActCtxW: Pointer;

function QueryActCtxW;

begin
GetProcedureAddress(_QueryActCtxW, kernel32, ''QueryActCtxW'');
asm
mov esp, ebp
pop ebp
jmp [_QueryActCtxW]
end;
end;
{$ELSE}
function QueryActCtxW; external kernel32 name ''QueryActCtxW'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ProcessIdToSessionId: Pointer;

function ProcessIdToSessionId;
begin
GetProcedureAddress(_ProcessIdToSessionId, kernel32, ''ProcessIdToSessionId'');
asm
mov esp, ebp
pop ebp
jmp [_ProcessIdToSessionId]
end;
end;
{$ELSE}
function ProcessIdToSessionId; external kernel32 name ''ProcessIdToSessionId'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_WTSGetActiveConsoleSessionId: Pointer;

function WTSGetActiveConsoleSessionId;
begin
GetProcedureAddress(_WTSGetActiveConsoleSessionId, kernel32, ''WTSGetActiveConsoleSessionId'');
asm
mov esp, ebp
pop ebp
jmp [_WTSGetActiveConsoleSessionId]


end;
end;
{$ELSE}
function WTSGetActiveConsoleSessionId; external kernel32 name ''WTSGetActiveConsoleSessionId'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IsWow64Process: Pointer;

function IsWow64Process;
begin
GetProcedureAddress(_IsWow64Process, kernel32, ''IsWow64Process'');
asm
mov esp, ebp
pop ebp
jmp [_IsWow64Process]
end;
end;
{$ELSE}
function IsWow64Process; external kernel32 name ''IsWow64Process'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLogicalProcessorInformation: Pointer;

function GetLogicalProcessorInformation;
begin
GetProcedureAddress(_GetLogicalProcessorInformation, kernel32, ''GetLogicalProcessorInformation'');
asm
mov esp, ebp
pop ebp
jmp [_GetLogicalProcessorInformation]
end;
end;
{$ELSE}
function GetLogicalProcessorInformation; external kernel32 name ''GetLogicalProcessorInformation'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetNumaHighestNodeNumber: Pointer;

function GetNumaHighestNodeNumber;
begin
GetProcedureAddress(_GetNumaHighestNodeNumber, kernel32, ''GetNumaHighestNodeNumber'');
asm
mov esp, ebp
pop ebp
jmp [_GetNumaHighestNodeNumber]
end;
end;
{$ELSE}
function GetNumaHighestNodeNumber; external kernel32 name ''GetNumaHighestNodeNumber'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetNumaProcessorNode: Pointer;

function GetNumaProcessorNode;
begin
GetProcedureAddress(_GetNumaProcessorNode, kernel32, ''GetNumaProcessorNode'');
asm
mov esp, ebp
pop ebp
jmp [_GetNumaProcessorNode]
end;
end;
{$ELSE}
function GetNumaProcessorNode; external kernel32 name ''GetNumaProcessorNode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetNumaNodeProcessorMask: Pointer;

function GetNumaNodeProcessorMask;
begin
GetProcedureAddress(_GetNumaNodeProcessorMask, kernel32, ''GetNumaNodeProcessorMask'');
asm
mov esp, ebp
pop ebp
jmp [_GetNumaNodeProcessorMask]
end;
end;
{$ELSE}
function GetNumaNodeProcessorMask; external kernel32 name ''GetNumaNodeProcessorMask'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetNumaAvailableMemoryNode: Pointer;

function GetNumaAvailableMemoryNode;
begin
GetProcedureAddress(_GetNumaAvailableMemoryNode, kernel32, ''GetNumaAvailableMemoryNode'');
asm
mov esp, ebp
pop ebp
jmp [_GetNumaAvailableMemoryNode]
end;
end;
{$ELSE}
function GetNumaAvailableMemoryNode; external kernel32 name ''GetNumaAvailableMemoryNode'';
{$ENDIF DYNAMIC_LINK}

end.

58楼: 我测试了,是<< C >>

59楼: {******************************************************************************}
{ }
{ Graphics Device Interface API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: wingdi.h, released June 2000. The original Pascal }
{ code is: WinGDI.pas, released December 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI home }
{ page, located at http://delphi-jedi.org or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }


{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}

unit JwaWinGDI;

{$WEAKPACKAGEUNIT}

{$HPPEMIT ''''}
{$HPPEMIT ''#include "WinGDI.h"''}
{$HPPEMIT ''''}

{$I WINDEFINES.INC}

interface

uses
JwaWinNT, JwaWinType;

// Binary raster ops

const
R2_BLACK = 1; // 0
{$EXTERNALSYM R2_BLACK}
R2_NOTMERGEPEN = 2; // DPon
{$EXTERNALSYM R2_NOTMERGEPEN}
R2_MASKNOTPEN = 3; // DPna
{$EXTERNALSYM R2_MASKNOTPEN}
R2_NOTCOPYPEN = 4; // PN
{$EXTERNALSYM R2_NOTCOPYPEN}
R2_MASKPENNOT = 5; // PDna
{$EXTERNALSYM R2_MASKPENNOT}
R2_NOT = 6; // Dn
{$EXTERNALSYM R2_NOT}
R2_XORPEN = 7; // DPx
{$EXTERNALSYM R2_XORPEN}
R2_NOTMASKPEN = 8; // DPan
{$EXTERNALSYM R2_NOTMASKPEN}
R2_MASKPEN = 9; // DPa
{$EXTERNALSYM R2_MASKPEN}
R2_NOTXORPEN = 10; // DPxn
{$EXTERNALSYM R2_NOTXORPEN}
R2_NOP = 11; // D
{$EXTERNALSYM R2_NOP}
R2_MERGENOTPEN = 12; // DPno
{$EXTERNALSYM R2_MERGENOTPEN}
R2_COPYPEN = 13; // P
{$EXTERNALSYM R2_COPYPEN}
R2_MERGEPENNOT = 14; // PDno
{$EXTERNALSYM R2_MERGEPENNOT}
R2_MERGEPEN = 15; // DPo
{$EXTERNALSYM R2_MERGEPEN}
R2_WHITE = 16; // 1
{$EXTERNALSYM R2_WHITE}
R2_LAST = 16;
{$EXTERNALSYM R2_LAST}

// Ternary raster operations

SRCCOPY = DWORD($00CC0020); // dest = source
{$EXTERNALSYM SRCCOPY}
SRCPAINT = DWORD($00EE0086); // dest = source OR dest
{$EXTERNALSYM SRCPAINT}
SRCAND = DWORD($008800C6); // dest = source AND dest
{$EXTERNALSYM SRCAND}
SRCINVERT = DWORD($00660046); // dest = source XOR dest
{$EXTERNALSYM SRCINVERT}
SRCERASE = DWORD($00440328); // dest = source AND (NOT dest )
{$EXTERNALSYM SRCERASE}
NOTSRCCOPY = DWORD($00330008); // dest = (NOT source)
{$EXTERNALSYM NOTSRCCOPY}
NOTSRCERASE = DWORD($001100A6); // dest = (NOT src) AND (NOT dest)
{$EXTERNALSYM NOTSRCERASE}
MERGECOPY = DWORD($00C000CA); // dest = (source AND pattern)
{$EXTERNALSYM MERGECOPY}
MERGEPAINT = DWORD($00BB0226); // dest = (NOT source) OR dest
{$EXTERNALSYM MERGEPAINT}
PATCOPY = DWORD($00F00021); // dest = pattern
{$EXTERNALSYM PATCOPY}
PATPAINT = DWORD($00FB0A09); // dest = DPSnoo
{$EXTERNALSYM PATPAINT}

PATINVERT = DWORD($005A0049); // dest = pattern XOR dest
{$EXTERNALSYM PATINVERT}
DSTINVERT = DWORD($00550009); // dest = (NOT dest)
{$EXTERNALSYM DSTINVERT}
BLACKNESS = DWORD($00000042); // dest = BLACK
{$EXTERNALSYM BLACKNESS}
WHITENESS = DWORD($00FF0062); // dest = WHITE
{$EXTERNALSYM WHITENESS}

NOMIRRORBITMAP = DWORD($80000000); // Do not Mirror the bitmap in this call
{$EXTERNALSYM NOMIRRORBITMAP}
CAPTUREBLT = DWORD($40000000); // Include layered windows
{$EXTERNALSYM CAPTUREBLT}

// Quaternary raster codes

function MAKEROP4(Fore, Back: DWORD): DWORD;
{$EXTERNALSYM MAKEROP4}

const
GDI_ERROR = DWORD($FFFFFFFF);
{$EXTERNALSYM GDI_ERROR}
HGDI_ERROR = HANDLE($FFFFFFFF);
{$EXTERNALSYM HGDI_ERROR}

// Region Flags

ERROR = 0;
{$EXTERNALSYM ERROR}
NULLREGION = 1;
{$EXTERNALSYM NULLREGION}
SIMPLEREGION = 2;
{$EXTERNALSYM SIMPLEREGION}
COMPLEXREGION = 3;


{$EXTERNALSYM COMPLEXREGION}
RGN_ERROR = ERROR;
{$EXTERNALSYM RGN_ERROR}

// CombineRgn() Styles

RGN_AND = 1;
{$EXTERNALSYM RGN_AND}
RGN_OR = 2;
{$EXTERNALSYM RGN_OR}
RGN_XOR = 3;
{$EXTERNALSYM RGN_XOR}
RGN_DIFF = 4;
{$EXTERNALSYM RGN_DIFF}
RGN_COPY = 5;
{$EXTERNALSYM RGN_COPY}
RGN_MIN = RGN_AND;
{$EXTERNALSYM RGN_MIN}
RGN_MAX = RGN_COPY;
{$EXTERNALSYM RGN_MAX}

// StretchBlt() Modes

BLACKONWHITE = 1;
{$EXTERNALSYM BLACKONWHITE}
WHITEONBLACK = 2;
{$EXTERNALSYM WHITEONBLACK}
COLORONCOLOR = 3;
{$EXTERNALSYM COLORONCOLOR}
HALFTONE = 4;
{$EXTERNALSYM HALFTONE}
MAXSTRETCHBLTMODE = 4;
{$EXTERNALSYM MAXSTRETCHBLTMODE}

// New StretchBlt() Modes

STRETCH_ANDSCANS = BLACKONWHITE;
{$EXTERNALSYM STRETCH_ANDSCANS}
STRETCH_ORSCANS = WHITEONBLACK;
{$EXTERNALSYM STRETCH_ORSCANS}
STRETCH_DELETESCANS = COLORONCOLOR;
{$EXTERNALSYM STRETCH_DELETESCANS}
STRETCH_HALFTONE = HALFTONE;
{$EXTERNALSYM STRETCH_HALFTONE}

// PolyFill() Modes

ALTERNATE = 1;
{$EXTERNALSYM ALTERNATE}
WINDING = 2;
{$EXTERNALSYM WINDING}
POLYFILL_LAST = 2;
{$EXTERNALSYM POLYFILL_LAST}

// Layout Orientation Options

LAYOUT_RTL = $00000001; // Right to left
{$EXTERNALSYM LAYOUT_RTL}
LAYOUT_BTT = $00000002; // Bottom to top
{$EXTERNALSYM LAYOUT_BTT}
LAYOUT_VBH = $00000004; // Vertical before horizontal
{$EXTERNALSYM LAYOUT_VBH}
LAYOUT_ORIENTATIONMASK = (LAYOUT_RTL or LAYOUT_BTT or LAYOUT_VBH);
{$EXTERNALSYM LAYOUT_ORIENTATIONMASK}
LAYOUT_BITMAPORIENTATIONPRESERVED = $00000008;
{$EXTERNALSYM LAYOUT_BITMAPORIENTATIONPRESERVED}

// Text Alignment Options

TA_NOUPDATECP = 0;
{$EXTERNALSYM TA_NOUPDATECP}
TA_UPDATECP = 1;
{$EXTERNALSYM TA_UPDATECP}

TA_LEFT = 0;
{$EXTERNALSYM TA_LEFT}
TA_RIGHT = 2;
{$EXTERNALSYM TA_RIGHT}
TA_CENTER = 6;
{$EXTERNALSYM TA_CENTER}

TA_TOP = 0;
{$EXTERNALSYM TA_TOP}
TA_BOTTOM = 8;
{$EXTERNALSYM TA_BOTTOM}
TA_BASELINE = 24;
{$EXTERNALSYM TA_BASELINE}

TA_RTLREADING = 256;
{$EXTERNALSYM TA_RTLREADING}

{$IFDEF WINVER_0400_GREATER}
TA_MASK = (TA_BASELINE + TA_CENTER + TA_UPDATECP + TA_RTLREADING);
{$EXTERNALSYM TA_MASK}
{$ELSE}
TA_MASK = (TA_BASELINE + TA_CENTER + TA_UPDATECP);
{$EXTERNALSYM TA_MASK}
{$ENDIF}

VTA_BASELINE = TA_BASELINE;
{$EXTERNALSYM VTA_BASELINE}
VTA_LEFT = TA_BOTTOM;
{$EXTERNALSYM VTA_LEFT}
VTA_RIGHT = TA_TOP;
{$EXTERNALSYM VTA_RIGHT}
VTA_CENTER = TA_CENTER;
{$EXTERNALSYM VTA_CENTER}
VTA_BOTTOM = TA_RIGHT;
{$EXTERNALSYM VTA_BOTTOM}
VTA_TOP = TA_LEFT;
{$EXTERNALSYM VTA_TOP}

ETO_OPAQUE = $0002;


{$EXTERNALSYM ETO_OPAQUE}
ETO_CLIPPED = $0004;
{$EXTERNALSYM ETO_CLIPPED}

ETO_GLYPH_INDEX = $0010;
{$EXTERNALSYM ETO_GLYPH_INDEX}
ETO_RTLREADING = $0080;
{$EXTERNALSYM ETO_RTLREADING}
ETO_NUMERICSLOCAL = $0400;
{$EXTERNALSYM ETO_NUMERICSLOCAL}
ETO_NUMERICSLATIN = $0800;
{$EXTERNALSYM ETO_NUMERICSLATIN}
ETO_IGNORELANGUAGE = $1000;
{$EXTERNALSYM ETO_IGNORELANGUAGE}

ETO_PDY = $2000;
{$EXTERNALSYM ETO_PDY}

ASPECT_FILTERING = $0001;
{$EXTERNALSYM ASPECT_FILTERING}

// Bounds Accumulation APIs

DCB_RESET = $0001;
{$EXTERNALSYM DCB_RESET}
DCB_ACCUMULATE = $0002;
{$EXTERNALSYM DCB_ACCUMULATE}
DCB_DIRTY = DCB_ACCUMULATE;
{$EXTERNALSYM DCB_DIRTY}
DCB_SET = (DCB_RESET or DCB_ACCUMULATE);
{$EXTERNALSYM DCB_SET}
DCB_ENABLE = $0004;
{$EXTERNALSYM DCB_ENABLE}
DCB_DISABLE = $0008;
{$EXTERNALSYM DCB_DISABLE}

// Metafile Functions

META_SETBKCOLOR = $0201;
{$EXTERNALSYM META_SETBKCOLOR}
META_SETBKMODE = $0102;
{$EXTERNALSYM META_SETBKMODE}
META_SETMAPMODE = $0103;
{$EXTERNALSYM META_SETMAPMODE}
META_SETROP2 = $0104;
{$EXTERNALSYM META_SETROP2}
META_SETRELABS = $0105;
{$EXTERNALSYM META_SETRELABS}
META_SETPOLYFILLMODE = $0106;
{$EXTERNALSYM META_SETPOLYFILLMODE}
META_SETSTRETCHBLTMODE = $0107;
{$EXTERNALSYM META_SETSTRETCHBLTMODE}
META_SETTEXTCHAREXTRA = $0108;
{$EXTERNALSYM META_SETTEXTCHAREXTRA}
META_SETTEXTCOLOR = $0209;
{$EXTERNALSYM META_SETTEXTCOLOR}
META_SETTEXTJUSTIFICATION = $020A;
{$EXTERNALSYM META_SETTEXTJUSTIFICATION}
META_SETWINDOWORG = $020B;
{$EXTERNALSYM META_SETWINDOWORG}
META_SETWINDOWEXT = $020C;
{$EXTERNALSYM META_SETWINDOWEXT}
META_SETVIEWPORTORG = $020D;
{$EXTERNALSYM META_SETVIEWPORTORG}

META_SETVIEWPORTEXT = $020E;
{$EXTERNALSYM META_SETVIEWPORTEXT}
META_OFFSETWINDOWORG = $020F;
{$EXTERNALSYM META_OFFSETWINDOWORG}
META_SCALEWINDOWEXT = $0410;
{$EXTERNALSYM META_SCALEWINDOWEXT}
META_OFFSETVIEWPORTORG = $0211;
{$EXTERNALSYM META_OFFSETVIEWPORTORG}
META_SCALEVIEWPORTEXT = $0412;
{$EXTERNALSYM META_SCALEVIEWPORTEXT}
META_LINETO = $0213;
{$EXTERNALSYM META_LINETO}
META_MOVETO = $0214;
{$EXTERNALSYM META_MOVETO}
META_EXCLUDECLIPRECT = $0415;
{$EXTERNALSYM META_EXCLUDECLIPRECT}
META_INTERSECTCLIPRECT = $0416;
{$EXTERNALSYM META_INTERSECTCLIPRECT}
META_ARC = $0817;
{$EXTERNALSYM META_ARC}
META_ELLIPSE = $0418;
{$EXTERNALSYM META_ELLIPSE}
META_FLOODFILL = $0419;
{$EXTERNALSYM META_FLOODFILL}
META_PIE = $081A;
{$EXTERNALSYM META_PIE}
META_RECTANGLE = $041B;

{$EXTERNALSYM META_RECTANGLE}
META_ROUNDRECT = $061C;
{$EXTERNALSYM META_ROUNDRECT}
META_PATBLT = $061D;
{$EXTERNALSYM META_PATBLT}
META_SAVEDC = $001E;
{$EXTERNALSYM META_SAVEDC}
META_SETPIXEL = $041F;
{$EXTERNALSYM META_SETPIXEL}
META_OFFSETCLIPRGN = $0220;
{$EXTERNALSYM META_OFFSETCLIPRGN}
META_TEXTOUT = $0521;
{$EXTERNALSYM META_TEXTOUT}
META_BITBLT = $0922;
{$EXTERNALSYM META_BITBLT}
META_STRETCHBLT = $0B23;
{$EXTERNALSYM META_STRETCHBLT}
META_POLYGON = $0324;
{$EXTERNALSYM META_POLYGON}
META_POLYLINE = $0325;
{$EXTERNALSYM META_POLYLINE}
META_ESCAPE = $0626;
{$EXTERNALSYM META_ESCAPE}
META_RESTOREDC = $0127;
{$EXTERNALSYM META_RESTOREDC}
META_FILLREGION = $0228;
{$EXTERNALSYM META_FILLREGION}
META_FRAMEREGION = $0429;


{$EXTERNALSYM META_FRAMEREGION}
META_INVERTREGION = $012A;
{$EXTERNALSYM META_INVERTREGION}
META_PAINTREGION = $012B;
{$EXTERNALSYM META_PAINTREGION}
META_SELECTCLIPREGION = $012C;
{$EXTERNALSYM META_SELECTCLIPREGION}
META_SELECTOBJECT = $012D;
{$EXTERNALSYM META_SELECTOBJECT}
META_SETTEXTALIGN = $012E;
{$EXTERNALSYM META_SETTEXTALIGN}
META_CHORD = $0830;
{$EXTERNALSYM META_CHORD}
META_SETMAPPERFLAGS = $0231;
{$EXTERNALSYM META_SETMAPPERFLAGS}
META_EXTTEXTOUT = $0a32;
{$EXTERNALSYM META_EXTTEXTOUT}
META_SETDIBTODEV = $0d33;
{$EXTERNALSYM META_SETDIBTODEV}
META_SELECTPALETTE = $0234;
{$EXTERNALSYM META_SELECTPALETTE}
META_REALIZEPALETTE = $0035;
{$EXTERNALSYM META_REALIZEPALETTE}
META_ANIMATEPALETTE = $0436;
{$EXTERNALSYM META_ANIMATEPALETTE}
META_SETPALENTRIES = $0037;
{$EXTERNALSYM META_SETPALENTRIES}
META_POLYPOLYGON = $0538;
{$EXTERNALSYM META_POLYPOLYGON}
META_RESIZEPALETTE = $0139;
{$EXTERNALSYM META_RESIZEPALETTE}
META_DIBBITBLT = $0940;
{$EXTERNALSYM META_DIBBITBLT}
META_DIBSTRETCHBLT = $0b41;
{$EXTERNALSYM META_DIBSTRETCHBLT}
META_DIBCREATEPATTERNBRUSH = $0142;
{$EXTERNALSYM META_DIBCREATEPATTERNBRUSH}
META_STRETCHDIB = $0f43;
{$EXTERNALSYM META_STRETCHDIB}
META_EXTFLOODFILL = $0548;
{$EXTERNALSYM META_EXTFLOODFILL}
META_SETLAYOUT = $0149;
{$EXTERNALSYM META_SETLAYOUT}
META_DELETEOBJECT = $01f0;
{$EXTERNALSYM META_DELETEOBJECT}
META_CREATEPALETTE = $00f7;
{$EXTERNALSYM META_CREATEPALETTE}
META_CREATEPATTERNBRUSH = $01F9;
{$EXTERNALSYM META_CREATEPATTERNBRUSH}
META_CREATEPENINDIRECT = $02FA;
{$EXTERNALSYM META_CREATEPENINDIRECT}
META_CREATEFONTINDIRECT = $02FB;
{$EXTERNALSYM META_CREATEFONTINDIRECT}
META_CREATEBRUSHINDIRECT = $02FC;
{$EXTERNALSYM META_CREATEBRUSHINDIRECT}
META_CREATEREGION = $06FF;
{$EXTERNALSYM META_CREATEREGION}

type
PDrawPatRect = ^TDrawPatRect;
_DRAWPATRECT = record
ptPosition: POINT;
ptSize: POINT;
wStyle: WORD;
wPattern: WORD;
end;
{$EXTERNALSYM _DRAWPATRECT}
DRAWPATRECT = _DRAWPATRECT;
{$EXTERNALSYM DRAWPATRECT}
TDrawPatRect = _DRAWPATRECT;

// GDI Escapes

const
NEWFRAME = 1;
{$EXTERNALSYM NEWFRAME}
_ABORTDOC = 2; // Underscore prfix by translator (nameclash)
{$EXTERNALSYM ABORTDOC}
NEXTBAND = 3;
{$EXTERNALSYM NEXTBAND}
SETCOLORTABLE = 4;
{$EXTERNALSYM SETCOLORTABLE}
GETCOLORTABLE = 5;
{$EXTERNALSYM GETCOLORTABLE}
FLUSHOUTPUT = 6;
{$EXTERNALSYM FLUSHOUTPUT}
DRAFTMODE = 7;
{$EXTERNALSYM DRAFTMODE}
QUERYESCSUPPORT = 8;


{$EXTERNALSYM QUERYESCSUPPORT}
SETABORTPROC_ = 9; // Underscore prfix by translator (nameclash)
{$EXTERNALSYM SETABORTPROC}
STARTDOC_ = 10; // Underscore prfix by translator (nameclash)
{$EXTERNALSYM STARTDOC}
ENDDOC_ = 11; // Underscore prfix by translator (nameclash)
{$EXTERNALSYM ENDDOC}
GETPHYSPAGESIZE = 12;
{$EXTERNALSYM GETPHYSPAGESIZE}
GETPRINTINGOFFSET = 13;
{$EXTERNALSYM GETPRINTINGOFFSET}
GETSCALINGFACTOR = 14;
{$EXTERNALSYM GETSCALINGFACTOR}
MFCOMMENT = 15;
{$EXTERNALSYM MFCOMMENT}
GETPENWIDTH = 16;
{$EXTERNALSYM GETPENWIDTH}
SETCOPYCOUNT = 17;
{$EXTERNALSYM SETCOPYCOUNT}
SELECTPAPERSOURCE = 18;
{$EXTERNALSYM SELECTPAPERSOURCE}
DEVICEDATA = 19;
{$EXTERNALSYM DEVICEDATA}
PASSTHROUGH = 19;
{$EXTERNALSYM PASSTHROUGH}
GETTECHNOLGY = 20;
{$EXTERNALSYM GETTECHNOLGY}
GETTECHNOLOGY = 20;
{$EXTERNALSYM GETTECHNOLOGY}


SETLINECAP = 21;
{$EXTERNALSYM SETLINECAP}
SETLINEJOIN = 22;
{$EXTERNALSYM SETLINEJOIN}
SETMITERLIMIT_ = 23; // underscore prefix by translator (nameclash)
{$EXTERNALSYM SETMITERLIMIT}
BANDINFO = 24;
{$EXTERNALSYM BANDINFO}
DRAWPATTERNRECT = 25;
{$EXTERNALSYM DRAWPATTERNRECT}
GETVECTORPENSIZE = 26;
{$EXTERNALSYM GETVECTORPENSIZE}
GETVECTORBRUSHSIZE = 27;
{$EXTERNALSYM GETVECTORBRUSHSIZE}
ENABLEDUPLEX = 28;
{$EXTERNALSYM ENABLEDUPLEX}
GETSETPAPERBINS = 29;
{$EXTERNALSYM GETSETPAPERBINS}
GETSETPRINTORIENT = 30;
{$EXTERNALSYM GETSETPRINTORIENT}
ENUMPAPERBINS = 31;
{$EXTERNALSYM ENUMPAPERBINS}
SETDIBSCALING = 32;
{$EXTERNALSYM SETDIBSCALING}
EPSPRINTING = 33;
{$EXTERNALSYM EPSPRINTING}
ENUMPAPERMETRICS = 34;
{$EXTERNALSYM ENUMPAPERMETRICS}
GETSETPAPERMETRICS = 35;
{$EXTERNALSYM GETSETPAPERMETRICS}
POSTSCRIPT_DATA = 37;
{$EXTERNALSYM POSTSCRIPT_DATA}
POSTSCRIPT_IGNORE = 38;
{$EXTERNALSYM POSTSCRIPT_IGNORE}
MOUSETRAILS = 39;
{$EXTERNALSYM MOUSETRAILS}
GETDEVICEUNITS = 42;
{$EXTERNALSYM GETDEVICEUNITS}

GETEXTENDEDTEXTMETRICS = 256;
{$EXTERNALSYM GETEXTENDEDTEXTMETRICS}
GETEXTENTTABLE = 257;
{$EXTERNALSYM GETEXTENTTABLE}
GETPAIRKERNTABLE = 258;
{$EXTERNALSYM GETPAIRKERNTABLE}
GETTRACKKERNTABLE = 259;
{$EXTERNALSYM GETTRACKKERNTABLE}
EXTTEXTOUT_ = 512; // underscore prefix by translator (nameclash)
{$EXTERNALSYM EXTTEXTOUT}
GETFACENAME = 513;
{$EXTERNALSYM GETFACENAME}
DOWNLOADFACE = 514;
{$EXTERNALSYM DOWNLOADFACE}
ENABLERELATIVEWIDTHS = 768;
{$EXTERNALSYM ENABLERELATIVEWIDTHS}
ENABLEPAIRKERNING = 769;
{$EXTERNALSYM ENABLEPAIRKERNING}
SETKERNTRACK = 770;
{$EXTERNALSYM SETKERNTRACK}
SETALLJUSTVALUES = 771;
{$EXTERNALSYM SETALLJUSTVALUES}
SETCHARSET = 772;
{$EXTERNALSYM SETCHARSET}

STRETCHBLT_ESCAPE = 2048; // suffix _ESCAPE by translator because of
// name-clash with StretchBlt function
{$EXTERNALSYM STRETCHBLT}
METAFILE_DRIVER = 2049;
{$EXTERNALSYM METAFILE_DRIVER}
GETSETSCREENPARAMS = 3072;
{$EXTERNALSYM GETSETSCREENPARAMS}
QUERYDIBSUPPORT = 3073;
{$EXTERNALSYM QUERYDIBSUPPORT}
BEGIN_PATH = 4096;
{$EXTERNALSYM BEGIN_PATH}
CLIP_TO_PATH = 4097;
{$EXTERNALSYM CLIP_TO_PATH}
END_PATH = 4098;
{$EXTERNALSYM END_PATH}
EXT_DEVICE_CAPS = 4099;
{$EXTERNALSYM EXT_DEVICE_CAPS}
RESTORE_CTM = 4100;
{$EXTERNALSYM RESTORE_CTM}
SAVE_CTM = 4101;
{$EXTERNALSYM SAVE_CTM}
SET_ARC_DIRECTION = 4102;
{$EXTERNALSYM SET_ARC_DIRECTION}
SET_BACKGROUND_COLOR = 4103;

{$EXTERNALSYM SET_BACKGROUND_COLOR}
SET_POLY_MODE = 4104;
{$EXTERNALSYM SET_POLY_MODE}
SET_SCREEN_ANGLE = 4105;
{$EXTERNALSYM SET_SCREEN_ANGLE}
SET_SPREAD = 4106;
{$EXTERNALSYM SET_SPREAD}
TRANSFORM_CTM = 4107;
{$EXTERNALSYM TRANSFORM_CTM}
SET_CLIP_BOX = 4108;
{$EXTERNALSYM SET_CLIP_BOX}
SET_BOUNDS = 4109;
{$EXTERNALSYM SET_BOUNDS}
SET_MIRROR_MODE = 4110;
{$EXTERNALSYM SET_MIRROR_MODE}
OPENCHANNEL = 4110;
{$EXTERNALSYM OPENCHANNEL}
DOWNLOADHEADER = 4111;
{$EXTERNALSYM DOWNLOADHEADER}
CLOSECHANNEL = 4112;
{$EXTERNALSYM CLOSECHANNEL}
POSTSCRIPT_PASSTHROUGH = 4115;
{$EXTERNALSYM POSTSCRIPT_PASSTHROUGH}
ENCAPSULATED_POSTSCRIPT = 4116;
{$EXTERNALSYM ENCAPSULATED_POSTSCRIPT}

POSTSCRIPT_IDENTIFY = 4117; // new escape for NT5 pscript driver
{$EXTERNALSYM POSTSCRIPT_IDENTIFY}
POSTSCRIPT_INJECTION = 4118; // new escape for NT5 pscript driver


{$EXTERNALSYM POSTSCRIPT_INJECTION}

CHECKJPEGFORMAT = 4119;
{$EXTERNALSYM CHECKJPEGFORMAT}
CHECKPNGFORMAT = 4120;
{$EXTERNALSYM CHECKPNGFORMAT}

GET_PS_FEATURESETTING = 4121; // new escape for NT5 pscript driver
{$EXTERNALSYM GET_PS_FEATURESETTING}

SPCLPASSTHROUGH2 = 4568; // new escape for NT5 pscript driver
{$EXTERNALSYM SPCLPASSTHROUGH2}

//
// Parameters for POSTSCRIPT_IDENTIFY escape
//

PSIDENT_GDICENTRIC = 0;
{$EXTERNALSYM PSIDENT_GDICENTRIC}
PSIDENT_PSCENTRIC = 1;
{$EXTERNALSYM PSIDENT_PSCENTRIC}

//
// Header structure for the input buffer to POSTSCRIPT_INJECTION escape
//

type
PPsInjectData = ^TPsInjectData;
_PSINJECTDATA = record
DataBytes: DWORD; // number of raw data bytes (NOT including this header)
InjectionPoint: WORD; // injection point
PageNumber: WORD; // page number to apply the injection
// Followed by raw data to be injected
end;
{$EXTERNALSYM _PSINJECTDATA}
PSINJECTDATA = _PSINJECTDATA;
{$EXTERNALSYM PSINJECTDATA}
TPsInjectData = _PSINJECTDATA;

//
// Constants for PSINJECTDATA.InjectionPoint field
//

const
PSINJECT_BEGINSTREAM = 1;
{$EXTERNALSYM PSINJECT_BEGINSTREAM}
PSINJECT_PSADOBE = 2;
{$EXTERNALSYM PSINJECT_PSADOBE}
PSINJECT_PAGESATEND = 3;
{$EXTERNALSYM PSINJECT_PAGESATEND}
PSINJECT_PAGES = 4;
{$EXTERNALSYM PSINJECT_PAGES}

PSINJECT_DOCNEEDEDRES = 5;
{$EXTERNALSYM PSINJECT_DOCNEEDEDRES}
PSINJECT_DOCSUPPLIEDRES = 6;
{$EXTERNALSYM PSINJECT_DOCSUPPLIEDRES}
PSINJECT_PAGEORDER = 7;
{$EXTERNALSYM PSINJECT_PAGEORDER}
PSINJECT_ORIENTATION = 8;
{$EXTERNALSYM PSINJECT_ORIENTATION}
PSINJECT_BOUNDINGBOX = 9;
{$EXTERNALSYM PSINJECT_BOUNDINGBOX}
PSINJECT_DOCUMENTPROCESSCOLORS = 10;
{$EXTERNALSYM PSINJECT_DOCUMENTPROCESSCOLORS}

PSINJECT_COMMENTS = 11;

{$EXTERNALSYM PSINJECT_COMMENTS}
PSINJECT_BEGINDEFAULTS = 12;
{$EXTERNALSYM PSINJECT_BEGINDEFAULTS}
PSINJECT_ENDDEFAULTS = 13;
{$EXTERNALSYM PSINJECT_ENDDEFAULTS}
PSINJECT_BEGINPROLOG = 14;
{$EXTERNALSYM PSINJECT_BEGINPROLOG}
PSINJECT_ENDPROLOG = 15;
{$EXTERNALSYM PSINJECT_ENDPROLOG}
PSINJECT_BEGINSETUP = 16;
{$EXTERNALSYM PSINJECT_BEGINSETUP}
PSINJECT_ENDSETUP = 17;
{$EXTERNALSYM PSINJECT_ENDSETUP}
PSINJECT_TRAILER = 18;
{$EXTERNALSYM PSINJECT_TRAILER}
PSINJECT_EOF = 19;
{$EXTERNALSYM PSINJECT_EOF}
PSINJECT_ENDSTREAM = 20;
{$EXTERNALSYM PSINJECT_ENDSTREAM}
PSINJECT_DOCUMENTPROCESSCOLORSATEND = 21;
{$EXTERNALSYM PSINJECT_DOCUMENTPROCESSCOLORSATEND}

PSINJECT_PAGENUMBER = 100;
{$EXTERNALSYM PSINJECT_PAGENUMBER}
PSINJECT_BEGINPAGESETUP = 101;
{$EXTERNALSYM PSINJECT_BEGINPAGESETUP}
PSINJECT_ENDPAGESETUP = 102;
{$EXTERNALSYM PSINJECT_ENDPAGESETUP}
PSINJECT_PAGETRAILER = 103;
{$EXTERNALSYM PSINJECT_PAGETRAILER}
PSINJECT_PLATECOLOR = 104;
{$EXTERNALSYM PSINJECT_PLATECOLOR}

PSINJECT_SHOWPAGE = 105;
{$EXTERNALSYM PSINJECT_SHOWPAGE}
PSINJECT_PAGEBBOX = 106;
{$EXTERNALSYM PSINJECT_PAGEBBOX}
PSINJECT_ENDPAGECOMMENTS = 107;
{$EXTERNALSYM PSINJECT_ENDPAGECOMMENTS}

PSINJECT_VMSAVE = 200;
{$EXTERNALSYM PSINJECT_VMSAVE}
PSINJECT_VMRESTORE = 201;
{$EXTERNALSYM PSINJECT_VMRESTORE}

//
// Parameter for GET_PS_FEATURESETTING escape
//

FEATURESETTING_NUP = 0;
{$EXTERNALSYM FEATURESETTING_NUP}
FEATURESETTING_OUTPUT = 1;
{$EXTERNALSYM FEATURESETTING_OUTPUT}
FEATURESETTING_PSLEVEL = 2;
{$EXTERNALSYM FEATURESETTING_PSLEVEL}
FEATURESETTING_CUSTPAPER = 3;
{$EXTERNALSYM FEATURESETTING_CUSTPAPER}
FEATURESETTING_MIRROR = 4;
{$EXTERNALSYM FEATURESETTING_MIRROR}
FEATURESETTING_NEGATIVE = 5;
{$EXTERNALSYM FEATURESETTING_NEGATIVE}
FEATURESETTING_PROTOCOL = 6;
{$EXTERNALSYM FEATURESETTING_PROTOCOL}

//
// The range of selectors between FEATURESETTING_PRIVATE_BEGIN and
// FEATURESETTING_PRIVATE_END is reserved by Microsoft for private use
//

FEATURESETTING_PRIVATE_BEGIN = $1000;
{$EXTERNALSYM FEATURESETTING_PRIVATE_BEGIN}
FEATURESETTING_PRIVATE_END = $1FFF;
{$EXTERNALSYM FEATURESETTING_PRIVATE_END}

//
// Information about output options
//

type
PPsFeatureOutput = ^TPsFeatureOutput;
_PSFEATURE_OUTPUT = record
bPageIndependent: BOOL;
bSetPageDevice: BOOL;
end;
{$EXTERNALSYM _PSFEATURE_OUTPUT}
PSFEATURE_OUTPUT = _PSFEATURE_OUTPUT;
{$EXTERNALSYM PSFEATURE_OUTPUT}
PPSFEATURE_OUTPUT = ^PSFEATURE_OUTPUT;
{$EXTERNALSYM PPSFEATURE_OUTPUT}
TPsFeatureOutput = _PSFEATURE_OUTPUT;


//
// Information about custom paper size
//

PPsFeatureCustPaper = ^TPsFeatureCustPaper;
_PSFEATURE_CUSTPAPER = record
lOrientation: LONG;
lWidth: LONG;
lHeight: LONG;
lWidthOffset: LONG;
lHeightOffset: LONG;
end;
{$EXTERNALSYM _PSFEATURE_CUSTPAPER}
PSFEATURE_CUSTPAPER = _PSFEATURE_CUSTPAPER;
{$EXTERNALSYM PSFEATURE_CUSTPAPER}
PPSFEATURE_CUSTPAPER = ^PSFEATURE_CUSTPAPER;
{$EXTERNALSYM PPSFEATURE_CUSTPAPER}
TPsFeatureCustPaper = _PSFEATURE_CUSTPAPER;

// Value returned for FEATURESETTING_PROTOCOL

const
PSPROTOCOL_ASCII = 0;
{$EXTERNALSYM PSPROTOCOL_ASCII}
PSPROTOCOL_BCP = 1;
{$EXTERNALSYM PSPROTOCOL_BCP}
PSPROTOCOL_TBCP = 2;
{$EXTERNALSYM PSPROTOCOL_TBCP}
PSPROTOCOL_BINARY = 3;
{$EXTERNALSYM PSPROTOCOL_BINARY}

// Flag returned from QUERYDIBSUPPORT

QDI_SETDIBITS = 1;
{$EXTERNALSYM QDI_SETDIBITS}
QDI_GETDIBITS = 2;
{$EXTERNALSYM QDI_GETDIBITS}
QDI_DIBTOSCREEN = 4;
{$EXTERNALSYM QDI_DIBTOSCREEN}
QDI_STRETCHDIB = 8;
{$EXTERNALSYM QDI_STRETCHDIB}

// Spooler Error Codes

SP_NOTREPORTED = $4000;
{$EXTERNALSYM SP_NOTREPORTED}
SP_ERROR = DWORD(-1);
{$EXTERNALSYM SP_ERROR}
SP_APPABORT = DWORD(-2);
{$EXTERNALSYM SP_APPABORT}
SP_USERABORT = DWORD(-3);
{$EXTERNALSYM SP_USERABORT}
SP_OUTOFDISK = DWORD(-4);
{$EXTERNALSYM SP_OUTOFDISK}
SP_OUTOFMEMORY = DWORD(-5);
{$EXTERNALSYM SP_OUTOFMEMORY}

PR_JOBSTATUS = $0000;
{$EXTERNALSYM PR_JOBSTATUS}

// Object Definitions for EnumObjects()

OBJ_PEN = 1;
{$EXTERNALSYM OBJ_PEN}
OBJ_BRUSH = 2;
{$EXTERNALSYM OBJ_BRUSH}
OBJ_DC = 3;
{$EXTERNALSYM OBJ_DC}
OBJ_METADC = 4;
{$EXTERNALSYM OBJ_METADC}
OBJ_PAL = 5;
{$EXTERNALSYM OBJ_PAL}
OBJ_FONT = 6;
{$EXTERNALSYM OBJ_FONT}
OBJ_BITMAP = 7;
{$EXTERNALSYM OBJ_BITMAP}
OBJ_REGION = 8;
{$EXTERNALSYM OBJ_REGION}
OBJ_METAFILE = 9;
{$EXTERNALSYM OBJ_METAFILE}
OBJ_MEMDC = 10;
{$EXTERNALSYM OBJ_MEMDC}
OBJ_EXTPEN = 11;
{$EXTERNALSYM OBJ_EXTPEN}
OBJ_ENHMETADC = 12;
{$EXTERNALSYM OBJ_ENHMETADC}
OBJ_ENHMETAFILE = 13;
{$EXTERNALSYM OBJ_ENHMETAFILE}
OBJ_COLORSPACE = 14;
{$EXTERNALSYM OBJ_COLORSPACE}

// xform stuff

MWT_IDENTITY = 1;
{$EXTERNALSYM MWT_IDENTITY}
MWT_LEFTMULTIPLY = 2;
{$EXTERNALSYM MWT_LEFTMULTIPLY}
MWT_RIGHTMULTIPLY = 3;
{$EXTERNALSYM MWT_RIGHTMULTIPLY}

MWT_MIN = MWT_IDENTITY;
{$EXTERNALSYM MWT_MIN}
MWT_MAX = MWT_RIGHTMULTIPLY;
{$EXTERNALSYM MWT_MAX}

type
PXform = ^TXform;
tagXFORM = record
eM11: FLOAT;
eM12: FLOAT;
eM21: FLOAT;
eM22: FLOAT;
eDx: FLOAT;
eDy: FLOAT;
end;
{$EXTERNALSYM tagXFORM}
XFORM = tagXFORM;
{$EXTERNALSYM XFORM}
LPXFORM = ^XFORM;
{$EXTERNALSYM LPXFORM}
TXform = XFORM;

// Bitmap Header Definition

PBitmap = ^TBitmap;
tagBITMAP = record
bmType: LONG;
bmWidth: LONG;
bmHeight: LONG;
bmWidthBytes: LONG;
bmPlanes: WORD;
bmBitsPixel: WORD;
bmBits: LPVOID;
end;
{$EXTERNALSYM tagBITMAP}
BITMAP = tagBITMAP;
{$EXTERNALSYM BITMAP}
LPBITMAP = ^BITMAP;
{$EXTERNALSYM LPBITMAP}
NPBITMAP = ^BITMAP;
{$EXTERNALSYM NPBITMAP}
TBitmap = BITMAP;

// #include

PRgbTriple = ^TRgbTriple;
tagRGBTRIPLE = packed record
rgbtBlue: BYTE;
rgbtGreen: BYTE;
rgbtRed: BYTE;
end;
{$EXTERNALSYM tagRGBTRIPLE}
RGBTRIPLE = tagRGBTRIPLE;
{$EXTERNALSYM RGBTRIPLE}
TRgbTriple = RGBTRIPLE;

// #include

PRgbQuad = ^TRgbQuad;
tagRGBQUAD = record
rgbBlue: BYTE;
rgbGreen: BYTE;
rgbRed: BYTE;
rgbReserved: BYTE;
end;
{$EXTERNALSYM tagRGBQUAD}


RGBQUAD = tagRGBQUAD;
{$EXTERNALSYM RGBQUAD}
LPRGBQUAD = ^RGBQUAD;
{$EXTERNALSYM LPRGBQUAD}
TRgbQuad = RGBQUAD;

// Image Color Matching color definitions

const
CS_ENABLE = $00000001;
{$EXTERNALSYM CS_ENABLE}
CS_DISABLE = $00000002;
{$EXTERNALSYM CS_DISABLE}
CS_DELETE_TRANSFORM = $00000003;
{$EXTERNALSYM CS_DELETE_TRANSFORM}

// Logcolorspace signature

LCS_SIGNATURE = ''PSOC'';
{$EXTERNALSYM LCS_SIGNATURE}

// Logcolorspace lcsType values

LCS_sRGB = ''sRGB'';
{$EXTERNALSYM LCS_sRGB}
LCS_WINDOWS_COLOR_SPACE = ''Win ''; // Windows default color space
{$EXTERNALSYM LCS_WINDOWS_COLOR_SPACE}

type
LCSCSTYPE = LONG;
{$EXTERNALSYM LCSCSTYPE}

const
LCS_CALIBRATED_RGB = $00000000;
{$EXTERNALSYM LCS_CALIBRATED_RGB}

type
LCSGAMUTMATCH = LONG;
{$EXTERNALSYM LCSGAMUTMATCH }

const
LCS_GM_BUSINESS = $00000001;

{$EXTERNALSYM LCS_GM_BUSINESS}
LCS_GM_GRAPHICS = $00000002;
{$EXTERNALSYM LCS_GM_GRAPHICS}
LCS_GM_IMAGES = $00000004;
{$EXTERNALSYM LCS_GM_IMAGES}
LCS_GM_ABS_COLORIMETRIC = $00000008;
{$EXTERNALSYM LCS_GM_ABS_COLORIMETRIC}

// ICM Defines for results from CheckColorInGamut()

CM_OUT_OF_GAMUT = 255;
{$EXTERNALSYM CM_OUT_OF_GAMUT}
CM_IN_GAMUT = 0;
{$EXTERNALSYM CM_IN_GAMUT}

// UpdateICMRegKey Constants

ICM_ADDPROFILE = 1;
{$EXTERNALSYM ICM_ADDPROFILE}
ICM_DELETEPROFILE = 2;
{$EXTERNALSYM ICM_DELETEPROFILE}
ICM_QUERYPROFILE = 3;
{$EXTERNALSYM ICM_QUERYPROFILE}
ICM_SETDEFAULTPROFILE = 4;
{$EXTERNALSYM ICM_SETDEFAULTPROFILE}
ICM_REGISTERICMATCHER = 5;
{$EXTERNALSYM ICM_REGISTERICMATCHER}
ICM_UNREGISTERICMATCHER = 6;
{$EXTERNALSYM ICM_UNREGISTERICMATCHER}
ICM_QUERYMATCH = 7;
{$EXTERNALSYM ICM_QUERYMATCH}

// Macros to retrieve CMYK values from a COLORREF


function GetKValue(cmyk: COLORREF): BYTE;
{$EXTERNALSYM GetKValue}
function GetYValue(cmyk: COLORREF): BYTE;
{$EXTERNALSYM GetYValue}
function GetMValue(cmyk: COLORREF): BYTE;
{$EXTERNALSYM GetMValue}
function GetCValue(cmyk: COLORREF): BYTE;
{$EXTERNALSYM GetCValue}
function CMYK(c, m, y, k: BYTE): COLORREF;
{$EXTERNALSYM CMYK}

type
FXPT16DOT16 = Longint;
{$EXTERNALSYM FXPT16DOT16}
LPFXPT16DOT16 = ^FXPT16DOT16;
{$EXTERNALSYM LPFXPT16DOT16}

FXPT2DOT30 = Longint;
{$EXTERNALSYM FXPT2DOT30}
LPFXPT2DOT30 = ^FXPT2DOT30;
{$EXTERNALSYM LPFXPT2DOT30}

// ICM Color Definitions
// The following two structures are used for defining RGB''s in terms of CIEXYZ.

PCieXyz = ^TCieXyz;
tagCIEXYZ = record
ciexyzX: FXPT2DOT30;
ciexyzY: FXPT2DOT30;
ciexyzZ: FXPT2DOT30;
end;
{$EXTERNALSYM tagCIEXYZ}
CIEXYZ = tagCIEXYZ;
{$EXTERNALSYM CIEXYZ}
LPCIEXYZ = ^CIEXYZ;
{$EXTERNALSYM LPCIEXYZ}
TCieXyz = CIEXYZ;

PCieXyzTriple = ^TCieXyzTriple;
tagCIEXYZTRIPLE = record
ciexyzRed: CIEXYZ;
ciexyzGreen: CIEXYZ;
ciexyzBlue: CIEXYZ;
end;
{$EXTERNALSYM tagCIEXYZTRIPLE}
CIEXYZTRIPLE = tagCIEXYZTRIPLE;
{$EXTERNALSYM CIEXYZTRIPLE}
LPCIEXYZTRIPLE = ^CIEXYZTRIPLE;
{$EXTERNALSYM LPCIEXYZTRIPLE}
TCieXyzTriple = CIEXYZTRIPLE;

// The next structures the logical color space. Unlike pens and brushes,
// but like palettes, there is only one way to create a LogColorSpace.
// A pointer to it must be passed, its elements can''t be pushed as
// arguments.

PLogColorSpaceA = ^TLogColorSpaceA;
tagLOGCOLORSPACEA = record
lcsSignature: DWORD;
lcsVersion: DWORD;
lcsSize: DWORD;
lcsCSType: LCSCSTYPE;
lcsIntent: LCSGAMUTMATCH;
lcsEndpoints: CIEXYZTRIPLE;
lcsGammaRed: DWORD;
lcsGammaGreen: DWORD;
lcsGammaBlue: DWORD;
lcsFilename: array [0..MAX_PATH - 1] of CHAR;
end;
{$EXTERNALSYM tagLOGCOLORSPACEA}
LOGCOLORSPACEA = tagLOGCOLORSPACEA;
{$EXTERNALSYM LOGCOLORSPACEA}
LPLOGCOLORSPACEA = ^LOGCOLORSPACEA;
{$EXTERNALSYM LPLOGCOLORSPACEA}
TLogColorSpaceA = LOGCOLORSPACEA;

PLogColorSpaceW = ^TLogColorSpaceW;
tagLOGCOLORSPACEW = record
lcsSignature: DWORD;
lcsVersion: DWORD;
lcsSize: DWORD;
lcsCSType: LCSCSTYPE;
lcsIntent: LCSGAMUTMATCH;
lcsEndpoints: CIEXYZTRIPLE;
lcsGammaRed: DWORD;
lcsGammaGreen: DWORD;
lcsGammaBlue: DWORD;
lcsFilename: array [0..MAX_PATH - 1] of WCHAR;
end;
{$EXTERNALSYM tagLOGCOLORSPACEW}
LOGCOLORSPACEW = tagLOGCOLORSPACEW;
{$EXTERNALSYM LOGCOLORSPACEW}
LPLOGCOLORSPACEW = ^LOGCOLORSPACEW;
{$EXTERNALSYM LPLOGCOLORSPACEW}
TLogColorSpaceW = LOGCOLORSPACEW;

{$IFDEF UNICODE}
LOGCOLORSPACE = LOGCOLORSPACEW;
{$EXTERNALSYM LOGCOLORSPACE}
LPLOGCOLORSPACE = LPLOGCOLORSPACEW;
{$EXTERNALSYM LPLOGCOLORSPACE}


TLogColorSpace = TLogColorSpaceW;
PLogColorSpace = PLogColorSpaceW;
{$ELSE}
LOGCOLORSPACE = LOGCOLORSPACEA;
{$EXTERNALSYM LOGCOLORSPACE}
LPLOGCOLORSPACE = LPLOGCOLORSPACEA;
{$EXTERNALSYM LPLOGCOLORSPACE}
TLogColorSpace = TLogColorSpaceA;
PLogColorSpace = PLogColorSpaceA;
{$ENDIF}

// structures for defining DIBs

PBitmapCoreHeader = ^TBitmapCoreHeader;
tagBITMAPCOREHEADER = record
bcSize: DWORD;
bcWidth: WORD;
bcHeight: WORD;
bcPlanes: WORD;
bcBitCount: WORD;
end;
{$EXTERNALSYM tagBITMAPCOREHEADER}
BITMAPCOREHEADER = tagBITMAPCOREHEADER;
{$EXTERNALSYM BITMAPCOREHEADER}
LPBITMAPCOREHEADER = ^BITMAPCOREHEADER;
{$EXTERNALSYM LPBITMAPCOREHEADER}
TBitmapCoreHeader = BITMAPCOREHEADER;

PBitmapInfoHeader = ^TBitmapInfoHeader;
tagBITMAPINFOHEADER = record
biSize: DWORD;
biWidth: LONG;
biHeight: LONG;
biPlanes: WORD;
biBitCount: WORD;
biCompression: DWORD;


biSizeImage: DWORD;
biXPelsPerMeter: LONG;
biYPelsPerMeter: LONG;
biClrUsed: DWORD;
biClrImportant: DWORD;
end;
{$EXTERNALSYM tagBITMAPINFOHEADER}
BITMAPINFOHEADER = tagBITMAPINFOHEADER;
{$EXTERNALSYM BITMAPINFOHEADER}
LPBITMAPINFOHEADER = ^BITMAPINFOHEADER;
{$EXTERNALSYM LPBITMAPINFOHEADER}
TBitmapInfoHeader = BITMAPINFOHEADER;

PBitmapV4Header = ^TBitmapV4Header;
BITMAPV4HEADER = record
bV4Size: DWORD;
bV4Width: LONG;
bV4Height: LONG;
bV4Planes: WORD;
bV4BitCount: WORD;
bV4V4Compression: DWORD;
bV4SizeImage: DWORD;
bV4XPelsPerMeter: LONG;
bV4YPelsPerMeter: LONG;
bV4ClrUsed: DWORD;
bV4ClrImportant: DWORD;
bV4RedMask: DWORD;
bV4GreenMask: DWORD;
bV4BlueMask: DWORD;
bV4AlphaMask: DWORD;
bV4CSType: DWORD;
bV4Endpoints: CIEXYZTRIPLE;
bV4GammaRed: DWORD;
bV4GammaGreen: DWORD;
bV4GammaBlue: DWORD;


end;
{$EXTERNALSYM BITMAPV4HEADER}
LPBITMAPV4HEADER = ^BITMAPV4HEADER;
{$EXTERNALSYM LPBITMAPV4HEADER}
TBitmapV4Header = BITMAPV4HEADER;

PBitmapV5Header = ^TBitmapV5Header;
BITMAPV5HEADER = record
bV5Size: DWORD;
bV5Width: LONG;
bV5Height: LONG;
bV5Planes: WORD;
bV5BitCount: WORD;
bV5Compression: DWORD;
bV5SizeImage: DWORD;
bV5XPelsPerMeter: LONG;
bV5YPelsPerMeter: LONG;
bV5ClrUsed: DWORD;
bV5ClrImportant: DWORD;
bV5RedMask: DWORD;
bV5GreenMask: DWORD;
bV5BlueMask: DWORD;
bV5AlphaMask: DWORD;
bV5CSType: DWORD;
bV5Endpoints: CIEXYZTRIPLE;
bV5GammaRed: DWORD;
bV5GammaGreen: DWORD;
bV5GammaBlue: DWORD;
bV5Intent: DWORD;
bV5ProfileData: DWORD;
bV5ProfileSize: DWORD;
bV5Reserved: DWORD;
end;
{$EXTERNALSYM BITMAPV5HEADER}
LPBITMAPV5HEADER = ^BITMAPV5HEADER;
{$EXTERNALSYM LPBITMAPV5HEADER}
TBitmapV5Header = BITMAPV5HEADER;

// Values for bV5CSType

const
PROFILE_LINKED = ''LINK'';
{$EXTERNALSYM PROFILE_LINKED}
PROFILE_EMBEDDED = ''MBED'';
{$EXTERNALSYM PROFILE_EMBEDDED}

// constants for the biCompression field

BI_RGB = 0;
{$EXTERNALSYM BI_RGB}
BI_RLE8 = 1;
{$EXTERNALSYM BI_RLE8}
BI_RLE4 = 2;
{$EXTERNALSYM BI_RLE4}
BI_BITFIELDS = 3;
{$EXTERNALSYM BI_BITFIELDS}
BI_JPEG = 4;
{$EXTERNALSYM BI_JPEG}
BI_PNG = 5;
{$EXTERNALSYM BI_PNG}

type
PBitmapInfo = ^TBitmapInfo;
tagBITMAPINFO = record
bmiHeader: BITMAPINFOHEADER;
bmiColors: array [0..0] of RGBQUAD;
end;
{$EXTERNALSYM tagBITMAPINFO}
BITMAPINFO = tagBITMAPINFO;
{$EXTERNALSYM BITMAPINFO}
LPBITMAPINFO = ^BITMAPINFO;
{$EXTERNALSYM LPBITMAPINFO}
TBitmapInfo = BITMAPINFO;

PBitmapCoreInfo = ^TBitmapCoreInfo;
tagBITMAPCOREINFO = record
bmciHeader: BITMAPCOREHEADER;
bmciColors: array [0..0] of RGBTRIPLE;


end;
{$EXTERNALSYM tagBITMAPCOREINFO}
BITMAPCOREINFO = tagBITMAPCOREINFO;
{$EXTERNALSYM BITMAPCOREINFO}
LPBITMAPCOREINFO = ^BITMAPCOREINFO;
{$EXTERNALSYM LPBITMAPCOREINFO}
TBitmapCoreInfo = BITMAPCOREINFO;

// #include

PBitmapFileHeader = ^TBitmapFileHeader;
tagBITMAPFILEHEADER = packed record
bfType: WORD;
bfSize: DWORD;
bfReserved1: WORD;
bfReserved2: WORD;
bfOffBits: DWORD;
end;
{$EXTERNALSYM tagBITMAPFILEHEADER}
BITMAPFILEHEADER = tagBITMAPFILEHEADER;
{$EXTERNALSYM BITMAPFILEHEADER}
LPBITMAPFILEHEADER = ^BITMAPFILEHEADER;
{$EXTERNALSYM BITMAPFILEHEADER}
TBitmapFileHeader = BITMAPFILEHEADER;

// #include

function MAKEPOINTS(l: DWORD): POINTS;
{$EXTERNALSYM MAKEPOINTS}

type
PFontSignature = ^TFontSignature;
tagFONTSIGNATURE = record
fsUsb: array [0..3] of DWORD;
fsCsb: array [0..1] of DWORD;
end;
{$EXTERNALSYM tagFONTSIGNATURE}
FONTSIGNATURE = tagFONTSIGNATURE;
{$EXTERNALSYM FONTSIGNATURE}
LPFONTSIGNATURE = ^FONTSIGNATURE;
{$EXTERNALSYM LPFONTSIGNATURE}
TFontSignature = FONTSIGNATURE;

PCharSetInfo = ^TCharSetInfo;
tagCHARSETINFO = record
ciCharset: UINT;
ciACP: UINT;
fs: FONTSIGNATURE;
end;
{$EXTERNALSYM tagCHARSETINFO}
CHARSETINFO = tagCHARSETINFO;
{$EXTERNALSYM CHARSETINFO}
LPCHARSETINFO = ^CHARSETINFO;
{$EXTERNALSYM LPCHARSETINFO}
NPCHARSETINFO = ^CHARSETINFO;
{$EXTERNALSYM NPCHARSETINFO}
TCharSetInfo = CHARSETINFO;

const
TCI_SRCCHARSET = 1;
{$EXTERNALSYM TCI_SRCCHARSET}
TCI_SRCCODEPAGE = 2;
{$EXTERNALSYM TCI_SRCCODEPAGE}
TCI_SRCFONTSIG = 3;
{$EXTERNALSYM TCI_SRCFONTSIG}

type
PLocaleSignature = ^TLocaleSignature;
tagLOCALESIGNATURE = record
lsUsb: array [0..3] of DWORD;
lsCsbDefault: array [0..1] of DWORD;
lsCsbSupported: array [0..1] of DWORD;
end;


{$EXTERNALSYM tagLOCALESIGNATURE}
LOCALESIGNATURE = tagLOCALESIGNATURE;
{$EXTERNALSYM LOCALESIGNATURE}
LPLOCALESIGNATURE = ^LOCALESIGNATURE;
{$EXTERNALSYM LPLOCALESIGNATURE}
TLocaleSignature = LOCALESIGNATURE;

// Clipboard Metafile Picture Structure

PHandleTable = ^THandleTable;
tagHANDLETABLE = record
objectHandle: array [0..0] of HGDIOBJ;
end;
{$EXTERNALSYM tagHANDLETABLE}
HANDLETABLE = tagHANDLETABLE;
{$EXTERNALSYM HANDLETABLE}
LPHANDLETABLE = ^HANDLETABLE;
{$EXTERNALSYM LPHANDLETABLE}
THandleTable = HANDLETABLE;

PMetaRecord = ^TMetaRecord;
tagMETARECORD = record
rdSize: DWORD;
rdFunction: WORD;
rdParm: array [0..0] of WORD;
end;
{$EXTERNALSYM tagMETARECORD}
METARECORD = tagMETARECORD;
{$EXTERNALSYM METARECORD}
LPMETARECORD = ^METARECORD;
{$EXTERNALSYM LPMETARECORD}
TMetaRecord = METARECORD;

PMetaFilePict = ^TMetaFilePict;
tagMETAFILEPICT = record
mm: LONG;
xExt: LONG;
yExt: LONG;
hMF: HMETAFILE;
end;
{$EXTERNALSYM tagMETAFILEPICT}
METAFILEPICT = tagMETAFILEPICT;
{$EXTERNALSYM METAFILEPICT}
LPMETAFILEPICT = ^METAFILEPICT;
{$EXTERNALSYM LPMETAFILEPICT}
TMetaFilePict = METAFILEPICT;

// #include

PMetaHeader = ^TMetaHeader;
tagMETAHEADER = packed record
mtType: WORD;
mtHeaderSize: WORD;
mtVersion: WORD;
mtSize: DWORD;
mtNoObjects: WORD;
mtMaxRecord: DWORD;
mtNoParameters: WORD;
end;
{$EXTERNALSYM tagMETAHEADER}
METAHEADER = tagMETAHEADER;
{$EXTERNALSYM METAHEADER}
LPMETAHEADER = ^METAHEADER;
{$EXTERNALSYM LPMETAHEADER}
TMetaHeader = METAHEADER;

// #include

// Enhanced Metafile structures

PEnhMetaRecord = ^TEnhMetaRecord;
tagENHMETARECORD = record
iType: DWORD; // Record type EMR_XXX
nSize: DWORD; // Record size in bytes
dParm: array [0..0] of DWORD; // Parameters
end;
{$EXTERNALSYM tagENHMETARECORD}
ENHMETARECORD = tagENHMETARECORD;
{$EXTERNALSYM ENHMETARECORD}
LPENHMETARECORD = ^ENHMETARECORD;
{$EXTERNALSYM LPENHMETARECORD}
TEnhMetaRecord = ENHMETARECORD;

PEnhMetaHeader = ^TEnhMetaHeader;
tagENHMETAHEADER = record
iType: DWORD; // Record type EMR_HEADER
nSize: DWORD; // Record size in bytes. This may be greater
// than the sizeof(ENHMETAHEADER).
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
rclFrame: RECTL; // Inclusive-inclusive Picture Frame of metafile in .01 mm units
dSignature: DWORD; // Signature. Must be ENHMETA_SIGNATURE.
nVersion: DWORD; // Version number
nBytes: DWORD; // Size of the metafile in bytes
nRecords: DWORD; // Number of records in the metafile
nHandles: WORD; // Number of handles in the handle table


// Handle index zero is reserved.
sReserved: WORD; // Reserved. Must be zero.
nDescription: DWORD; // Number of chars in the unicode description string
// This is 0 if there is no description string
offDescription: DWORD; // Offset to the metafile description record.
// This is 0 if there is no description string
nPalEntries: DWORD; // Number of entries in the metafile palette.
szlDevice: SIZEL; // Size of the reference device in pels
szlMillimeters: SIZEL; // Size of the reference device in millimeters
{$IFDEF WINVER_0400_GREATER}
cbPixelFormat: DWORD; // Size of PIXELFORMATDESCRIPTOR information
// This is 0 if no pixel format is set
offPixelFormat: DWORD; // Offset to PIXELFORMATDESCRIPTOR
// This is 0 if no pixel format is set
bOpenGL: DWORD; // TRUE if OpenGL commands are present in
// the metafile, otherwise FALSE
{$ENDIF}
{$IFDEF WINVER_0500_GREATER}
szlMicrometers: SIZEL; // Size of the reference device in micrometers
{$ENDIF}
end;
{$EXTERNALSYM tagENHMETAHEADER}
ENHMETAHEADER = tagENHMETAHEADER;
{$EXTERNALSYM ENHMETAHEADER}
LPENHMETAHEADER = ^ENHMETAHEADER;
{$EXTERNALSYM LPENHMETAHEADER}
TEnhMetaHeader = tagENHMETAHEADER;

// tmPitchAndFamily flags

const
TMPF_FIXED_PITCH = $01;
{$EXTERNALSYM TMPF_FIXED_PITCH}
TMPF_VECTOR = $02;
{$EXTERNALSYM TMPF_VECTOR}
TMPF_DEVICE = $08;
{$EXTERNALSYM TMPF_DEVICE}
TMPF_TRUETYPE = $04;
{$EXTERNALSYM TMPF_TRUETYPE}

//
// BCHAR definition for APPs
//

type
{$IFDEF UNICODE}
BCHAR = WCHAR;
{$EXTERNALSYM BCHAR}
{$ELSE}
BCHAR = BYTE;
{$EXTERNALSYM BCHAR}
{$ENDIF}

type
PTextMetricA = ^TTextMetricA;
tagTEXTMETRICA = record
tmHeight: LONG;
tmAscent: LONG;
tmDescent: LONG;
tmInternalLeading: LONG;
tmExternalLeading: LONG;
tmAveCharWidth: LONG;
tmMaxCharWidth: LONG;
tmWeight: LONG;
tmOverhang: LONG;
tmDigitizedAspectX: LONG;
tmDigitizedAspectY: LONG;
tmFirstChar: BYTE;
tmLastChar: BYTE;
tmDefaultChar: BYTE;
tmBreakChar: BYTE;
tmItalic: BYTE;
tmUnderlined: BYTE;
tmStruckOut: BYTE;
tmPitchAndFamily: BYTE;
tmCharSet: BYTE;
end;
{$EXTERNALSYM tagTEXTMETRICA}
TEXTMETRICA = tagTEXTMETRICA;
{$EXTERNALSYM TEXTMETRICA}
LPTEXTMETRICA = ^TEXTMETRICA;
{$EXTERNALSYM LPTEXTMETRICA}
NPTEXTMETRICA = ^TEXTMETRICA;
{$EXTERNALSYM NPTEXTMETRICA}
TTextMetricA = TEXTMETRICA;

PTextMetricW = ^TTextMetricW;
tagTEXTMETRICW = record
tmHeight: LONG;
tmAscent: LONG;
tmDescent: LONG;
tmInternalLeading: LONG;
tmExternalLeading: LONG;
tmAveCharWidth: LONG;
tmMaxCharWidth: LONG;
tmWeight: LONG;
tmOverhang: LONG;
tmDigitizedAspectX: LONG;
tmDigitizedAspectY: LONG;
tmFirstChar: WCHAR;
tmLastChar: WCHAR;
tmDefaultChar: WCHAR;
tmBreakChar: WCHAR;
tmItalic: BYTE;
tmUnderlined: BYTE;
tmStruckOut: BYTE;
tmPitchAndFamily: BYTE;
tmCharSet: BYTE;
end;
{$EXTERNALSYM tagTEXTMETRICW}
TEXTMETRICW = tagTEXTMETRICW;
{$EXTERNALSYM TEXTMETRICW}
LPTEXTMETRICW = ^TEXTMETRICW;
{$EXTERNALSYM LPTEXTMETRICW}
NPTEXTMETRICW = ^TEXTMETRICW;
{$EXTERNALSYM NPTEXTMETRICW}
TTextMetricW = TEXTMETRICW;

{$IFDEF UNICODE}
TEXTMETRIC = TEXTMETRICW;
{$EXTERNALSYM TEXTMETRIC}
PTEXTMETRIC = PTEXTMETRICW;
{$EXTERNALSYM PTEXTMETRIC}
NPTEXTMETRIC = NPTEXTMETRICW;
{$EXTERNALSYM NPTEXTMETRIC}
LPTEXTMETRIC = LPTEXTMETRICW;
{$EXTERNALSYM LPTEXTMETRIC}
TTextMetric = TTextMetricW;
{$ELSE}
TEXTMETRIC = TEXTMETRICA;

{$EXTERNALSYM TEXTMETRIC}
NPTEXTMETRIC = NPTEXTMETRICA;
{$EXTERNALSYM NPTEXTMETRIC}
LPTEXTMETRIC = LPTEXTMETRICA;
{$EXTERNALSYM LPTEXTMETRIC}
TTextMetric = TTextMetricA;
{$ENDIF}

// ntmFlags field flags

const
NTM_REGULAR = $00000040;
{$EXTERNALSYM NTM_REGULAR}
NTM_BOLD = $00000020;
{$EXTERNALSYM NTM_BOLD}
NTM_ITALIC = $00000001;
{$EXTERNALSYM NTM_ITALIC}

// new in NT 5.0

NTM_NONNEGATIVE_AC = $00010000;
{$EXTERNALSYM NTM_NONNEGATIVE_AC}
NTM_PS_OPENTYPE = $00020000;
{$EXTERNALSYM NTM_PS_OPENTYPE}
NTM_TT_OPENTYPE = $00040000;
{$EXTERNALSYM NTM_TT_OPENTYPE}
NTM_MULTIPLEMASTER = $00080000;
{$EXTERNALSYM NTM_MULTIPLEMASTER}
NTM_TYPE1 = $00100000;
{$EXTERNALSYM NTM_TYPE1}
NTM_DSIG = $00200000;
{$EXTERNALSYM NTM_DSIG}

// #include

type
PNewTextMetricA = ^TNewTextMetricA;
tagNEWTEXTMETRICA = record
tmHeight: LONG;

tmAscent: LONG;
tmDescent: LONG;
tmInternalLeading: LONG;
tmExternalLeading: LONG;
tmAveCharWidth: LONG;
tmMaxCharWidth: LONG;
tmWeight: LONG;
tmOverhang: LONG;
tmDigitizedAspectX: LONG;
tmDigitizedAspectY: LONG;
tmFirstChar: BYTE;
tmLastChar: BYTE;
tmDefaultChar: BYTE;
tmBreakChar: BYTE;
tmItalic: BYTE;
tmUnderlined: BYTE;
tmStruckOut: BYTE;
tmPitchAndFamily: BYTE;
tmCharSet: BYTE;
ntmFlags: DWORD;
ntmSizeEM: UINT;
ntmCellHeight: UINT;
ntmAvgWidth: UINT;
end;
{$EXTERNALSYM tagNEWTEXTMETRICA}
NEWTEXTMETRICA = tagNEWTEXTMETRICA;
{$EXTERNALSYM NEWTEXTMETRICA}
LPNEWTEXTMETRICA = ^NEWTEXTMETRICA;
{$EXTERNALSYM LPNEWTEXTMETRICA}
NPNEWTEXTMETRICA = ^NEWTEXTMETRICA;
{$EXTERNALSYM NPNEWTEXTMETRICA}
TNewTextMetricA = NEWTEXTMETRICA;

PNewTextMetricW = ^TNewTextMetricW;
tagNEWTEXTMETRICW = record
tmHeight: LONG;


tmAscent: LONG;
tmDescent: LONG;
tmInternalLeading: LONG;
tmExternalLeading: LONG;
tmAveCharWidth: LONG;
tmMaxCharWidth: LONG;
tmWeight: LONG;
tmOverhang: LONG;
tmDigitizedAspectX: LONG;
tmDigitizedAspectY: LONG;
tmFirstChar: WCHAR;
tmLastChar: WCHAR;
tmDefaultChar: WCHAR;
tmBreakChar: WCHAR;
tmItalic: BYTE;
tmUnderlined: BYTE;
tmStruckOut: BYTE;
tmPitchAndFamily: BYTE;
tmCharSet: BYTE;
ntmFlags: DWORD;
ntmSizeEM: UINT;
ntmCellHeight: UINT;
ntmAvgWidth: UINT;
end;
{$EXTERNALSYM tagNEWTEXTMETRICW}
NEWTEXTMETRICW = tagNEWTEXTMETRICW;
{$EXTERNALSYM NEWTEXTMETRICW}
LPNEWTEXTMETRICW = ^NEWTEXTMETRICW;
{$EXTERNALSYM LPNEWTEXTMETRICW}
NPNEWTEXTMETRICW = ^NEWTEXTMETRICW;
{$EXTERNALSYM NPNEWTEXTMETRICW}
TNewTextMetricW = NEWTEXTMETRICW;

{$IFDEF UNICODE}
NEWTEXTMETRIC = NEWTEXTMETRICW;
{$EXTERNALSYM NEWTEXTMETRIC}


PNEWTEXTMETRIC = PNEWTEXTMETRICW;
{$EXTERNALSYM PNEWTEXTMETRIC}
NPNEWTEXTMETRIC = NPNEWTEXTMETRICW;
{$EXTERNALSYM NPNEWTEXTMETRIC}
LPNEWTEXTMETRIC = LPNEWTEXTMETRICW;
{$EXTERNALSYM LPNEWTEXTMETRIC}
TNewTextMetric = TNewTextMetricW;
{$ELSE}
NEWTEXTMETRIC = NEWTEXTMETRICW;
{$EXTERNALSYM NEWTEXTMETRIC}
PNEWTEXTMETRIC = PNEWTEXTMETRICW;
{$EXTERNALSYM PNEWTEXTMETRIC}
NPNEWTEXTMETRIC = NPNEWTEXTMETRICW;
{$EXTERNALSYM NPNEWTEXTMETRIC}
LPNEWTEXTMETRIC = LPNEWTEXTMETRICW;
{$EXTERNALSYM LPNEWTEXTMETRIC}
TNewTextMetric = TNewTextMetricW;
{$ENDIF}

// #include

PNewTextMetricExA = ^TNewTextMetricExA;
tagNEWTEXTMETRICEXA = record
ntmTm: NEWTEXTMETRICA;
ntmFontSig: FONTSIGNATURE;
end;
{$EXTERNALSYM tagNEWTEXTMETRICEXA}
NEWTEXTMETRICEXA = tagNEWTEXTMETRICEXA;
{$EXTERNALSYM NEWTEXTMETRICEXA}
TNewTextMetricExA = NEWTEXTMETRICEXA;

PNewTextMetricExW = ^TNewTextMetricExW;
tagNEWTEXTMETRICEXW = record
ntmTm: NEWTEXTMETRICW;
ntmFontSig: FONTSIGNATURE;
end;
{$EXTERNALSYM tagNEWTEXTMETRICEXW}
NEWTEXTMETRICEXW = tagNEWTEXTMETRICEXW;
{$EXTERNALSYM NEWTEXTMETRICEXW}
TNewTextMetricExW = NEWTEXTMETRICEXW;

{$IFDEF UNICODE}
NEWTEXTMETRICEX = NEWTEXTMETRICEXW;
{$EXTERNALSYM NEWTEXTMETRICEX}
TNewTextMetricEx = TNewTextMetricExW;
PNewTextMetricEx = PNewTextMetricExW;
{$ELSE}
NEWTEXTMETRICEX = NEWTEXTMETRICEXA;
{$EXTERNALSYM NEWTEXTMETRICEX}
TNewTextMetricEx = TNewTextMetricExA;
PNewTextMetricEx = PNewTextMetricExA;
{$ENDIF}

// GDI Logical Objects:

// Pel Array

PPelArray = ^TPelArray;
tagPELARRAY = record
paXCount: LONG;
paYCount: LONG;
paXExt: LONG;
paYExt: LONG;
paRGBs: BYTE;
end;
{$EXTERNALSYM tagPELARRAY}
PELARRAY = tagPELARRAY;
{$EXTERNALSYM PELARRAY}
LPPELARRAY = ^PELARRAY;
{$EXTERNALSYM LPPELARRAY}


TPelArray = PELARRAY;

// Logical Brush (or Pattern)

PLogBrush = ^TLogBrush;
tagLOGBRUSH = record
lbStyle: UINT;
lbColor: COLORREF;
lbHatch: ULONG_PTR; // Sundown: lbHatch could hold a HANDLE
end;
{$EXTERNALSYM tagLOGBRUSH}
LOGBRUSH = tagLOGBRUSH;
{$EXTERNALSYM LOGBRUSH}
LPLOGBRUSH = ^LOGBRUSH;
{$EXTERNALSYM LPLOGBRUSH}
NPLOGBRUSH = ^LOGBRUSH;
{$EXTERNALSYM NPLOGBRUSH}
TLogBrush = LOGBRUSH;

PLogBrush32 = ^TLogBrush32;
tagLOGBRUSH32 = record
lbStyle: UINT;
lbColor: COLORREF;
lbHatch: ULONG;
end;
{$EXTERNALSYM tagLOGBRUSH32}
LOGBRUSH32 = tagLOGBRUSH32;
{$EXTERNALSYM LOGBRUSH32}
LPLOGBRUSH32 = ^LOGBRUSH32;
{$EXTERNALSYM LPLOGBRUSH32}
NPLOGBRUSH32 = ^LOGBRUSH32;
{$EXTERNALSYM NPLOGBRUSH32}
TLogBrush32 = LOGBRUSH32;

PATTERN = LOGBRUSH;
{$EXTERNALSYM PATTERN}
PPATTERN = ^PATTERN;
{$EXTERNALSYM PPATTERN}
LPPATTERN = ^PATTERN;
{$EXTERNALSYM LPPATTERN}
NPPATTERN = ^PATTERN;
{$EXTERNALSYM NPPATTERN}

// Logical Pen

PLogPen = ^TLogPen;
tagLOGPEN = record
lopnStyle: UINT;
lopnWidth: POINT;
lopnColor: COLORREF;
end;
{$EXTERNALSYM tagLOGPEN}
LOGPEN = tagLOGPEN;
{$EXTERNALSYM LOGPEN}
LPLOGPEN = ^LOGPEN;
{$EXTERNALSYM LPLOGPEN}
NPLOGPEN = ^LOGPEN;
{$EXTERNALSYM NPLOGPEN}
TLogPen = LOGPEN;

PExtLogPen = ^TExtLogPen;
tagEXTLOGPEN = record
elpPenStyle: DWORD;
elpWidth: DWORD;
elpBrushStyle: UINT;
elpColor: COLORREF;
elpHatch: ULONG_PTR; // Sundown: elpHatch could take a HANDLE
elpNumEntries: DWORD;
elpStyleEntry: array [0..0] of DWORD;
end;
{$EXTERNALSYM tagEXTLOGPEN}
EXTLOGPEN = tagEXTLOGPEN;
{$EXTERNALSYM EXTLOGPEN}
LPEXTLOGPEN = ^EXTLOGPEN;
{$EXTERNALSYM LPEXTLOGPEN}
NPEXTLOGPEN = ^EXTLOGPEN;
{$EXTERNALSYM NPEXTLOGPEN}
TExtLogPen = EXTLOGPEN;

PPaletteEntry = ^TPaletteEntry;
tagPALETTEENTRY = record
peRed: BYTE;
peGreen: BYTE;
peBlue: BYTE;
peFlags: BYTE;
end;
{$EXTERNALSYM tagPALETTEENTRY}
PALETTEENTRY = tagPALETTEENTRY;
{$EXTERNALSYM PALETTEENTRY}
LPPALETTEENTRY = ^PALETTEENTRY;
{$EXTERNALSYM LPPALETTEENTRY}
TPaletteEntry = PALETTEENTRY;

// Logical Palette

PLogPalette = ^TLogPalette;
tagLOGPALETTE = record
palVersion: WORD;
palNumEntries: WORD;
palPalEntry: array [0..0] of PALETTEENTRY;
end;
{$EXTERNALSYM tagLOGPALETTE}
LOGPALETTE = tagLOGPALETTE;
{$EXTERNALSYM LOGPALETTE}
LPLOGPALETTE = ^LOGPALETTE;
{$EXTERNALSYM LPLOGPALETTE}
NPLOGPALETTE = ^LOGPALETTE;
{$EXTERNALSYM NPLOGPALETTE}
TLogPalette = LOGPALETTE;

// Logical Font

const
LF_FACESIZE = 32;
{$EXTERNALSYM LF_FACESIZE}

type
PLogFontA = ^TLogFontA;
tagLOGFONTA = record
lfHeight: LONG;
lfWidth: LONG;
lfEscapement: LONG;
lfOrientation: LONG;
lfWeight: LONG;
lfItalic: BYTE;
lfUnderline: BYTE;
lfStrikeOut: BYTE;
lfCharSet: BYTE;
lfOutPrecision: BYTE;
lfClipPrecision: BYTE;
lfQuality: BYTE;
lfPitchAndFamily: BYTE;
lfFaceName: array [0..LF_FACESIZE - 1] of CHAR;
end;
{$EXTERNALSYM tagLOGFONTA}
LOGFONTA = tagLOGFONTA;
{$EXTERNALSYM LOGFONTA}
LPLOGFONTA = ^LOGFONTA;
{$EXTERNALSYM LPLOGFONTA}
NPLOGFONTA = ^LOGFONTA;
{$EXTERNALSYM NPLOGFONTA}
TLogFontA = LOGFONTA;

PLogFontW = ^TLogFontW;
tagLOGFONTW = record
lfHeight: LONG;
lfWidth: LONG;
lfEscapement: LONG;
lfOrientation: LONG;
lfWeight: LONG;
lfItalic: BYTE;
lfUnderline: BYTE;
lfStrikeOut: BYTE;
lfCharSet: BYTE;
lfOutPrecision: BYTE;
lfClipPrecision: BYTE;
lfQuality: BYTE;
lfPitchAndFamily: BYTE;
lfFaceName: array [0..LF_FACESIZE - 1] of WCHAR;


end;
{$EXTERNALSYM tagLOGFONTW}
LOGFONTW = tagLOGFONTW;
{$EXTERNALSYM LOGFONTW}
LPLOGFONTW = ^LOGFONTW;
{$EXTERNALSYM LPLOGFONTW}
NPLOGFONTW = ^LOGFONTW;
{$EXTERNALSYM NPLOGFONTW}
TLogFontW = LOGFONTW;

{$IFDEF UNICODE}
LOGFONT = LOGFONTW;
{$EXTERNALSYM LOGFONT}
PLOGFONT = PLOGFONTW;
{$EXTERNALSYM PLOGFONT}
NPLOGFONT = NPLOGFONTW;
{$EXTERNALSYM NPLOGFONT}
LPLOGFONT = LPLOGFONTW;
{$EXTERNALSYM LPLOGFONT}
TLogFont = TLogFontW;
{$ELSE}
LOGFONT = LOGFONTA;
{$EXTERNALSYM LOGFONT}
PLOGFONT = PLOGFONTA;
{$EXTERNALSYM PLOGFONT}
NPLOGFONT = NPLOGFONTA;
{$EXTERNALSYM NPLOGFONT}
LPLOGFONT = LPLOGFONTA;
{$EXTERNALSYM LPLOGFONT}
TLogFont = TLogFontA;
{$ENDIF}

const
LF_FULLFACESIZE = 64;
{$EXTERNALSYM LF_FULLFACESIZE}

// Structure passed to FONTENUMPROC

type
PEnumLogFontA = ^TEnumLogFontA;
tagENUMLOGFONTA = record
elfLogFont: LOGFONTA;
elfFullName: array [ 0..LF_FULLFACESIZE - 1] of BYTE;
elfStyle: array [0..LF_FACESIZE - 1] of BYTE;
end;
{$EXTERNALSYM tagENUMLOGFONTA}
ENUMLOGFONTA = tagENUMLOGFONTA;
{$EXTERNALSYM ENUMLOGFONTA}
LPENUMLOGFONTA = ^ENUMLOGFONTA;
{$EXTERNALSYM LPENUMLOGFONTA}
TEnumLogFontA = ENUMLOGFONTA;

// Structure passed to FONTENUMPROC

PEnumLogFontW = ^TEnumLogFontW;
tagENUMLOGFONTW = record
elfLogFont: LOGFONTW;
elfFullName: array [0..LF_FULLFACESIZE - 1] of WCHAR;
elfStyle: array [0..LF_FACESIZE - 1] of WCHAR;
end;
{$EXTERNALSYM tagENUMLOGFONTW}
ENUMLOGFONTW = tagENUMLOGFONTW;
{$EXTERNALSYM ENUMLOGFONTW}
LPENUMLOGFONTW = ^ENUMLOGFONTW;
{$EXTERNALSYM LPENUMLOGFONTW}
TEnumLogFontW = ENUMLOGFONTW;

{$IFDEF UNICODE}
ENUMLOGFONT = ENUMLOGFONTW;
{$EXTERNALSYM ENUMLOGFONT}
LPENUMLOGFONT = LPENUMLOGFONTW;
{$EXTERNALSYM LPENUMLOGFONT}
TEnumLogFont = TEnumLogFontW;
PEnumLogFont = PEnumLogFontW;
{$ELSE}
ENUMLOGFONT = ENUMLOGFONTA;
{$EXTERNALSYM ENUMLOGFONT}
LPENUMLOGFONT = LPENUMLOGFONTA;
{$EXTERNALSYM LPENUMLOGFONT}
TEnumLogFont = TEnumLogFontA;
PEnumLogFont = PEnumLogFontA;
{$ENDIF}

PEnumLogFontExA = ^TEnumLogFontExA;
tagENUMLOGFONTEXA = record
elfLogFont: LOGFONTA;
elfFullName: array [0..LF_FULLFACESIZE - 1] of BYTE;
elfStyle: array [0..LF_FACESIZE - 1] of BYTE;
elfScript: array [0..LF_FACESIZE - 1] of BYTE;
end;
{$EXTERNALSYM tagENUMLOGFONTEXA}
ENUMLOGFONTEXA = tagENUMLOGFONTEXA;
{$EXTERNALSYM ENUMLOGFONTEXA}
LPENUMLOGFONTEXA = ^ENUMLOGFONTEXA;
{$EXTERNALSYM LPENUMLOGFONTEXA}
TEnumLogFontExA = ENUMLOGFONTEXA;

PEnumLogFontExW = ^TEnumLogFontExW;
tagENUMLOGFONTEXW = record
elfLogFont: LOGFONTW;
elfFullName: array [0..LF_FULLFACESIZE - 1] of WCHAR;
elfStyle: array [0..LF_FACESIZE - 1] of WCHAR;
elfScript: array [0..LF_FACESIZE - 1] of WCHAR;
end;


{$EXTERNALSYM tagENUMLOGFONTEXW}
ENUMLOGFONTEXW = tagENUMLOGFONTEXW;
{$EXTERNALSYM ENUMLOGFONTEXW}
LPENUMLOGFONTEXW = ^ENUMLOGFONTEXW;
{$EXTERNALSYM LPENUMLOGFONTEXW}
TEnumLogFontExW = ENUMLOGFONTEXW;

{$IFDEF UNICODE}
ENUMLOGFONTEX = ENUMLOGFONTEXW;
{$EXTERNALSYM ENUMLOGFONTEX}
LPENUMLOGFONTEX = LPENUMLOGFONTEXW;
{$EXTERNALSYM LPENUMLOGFONTEX}
TEnumLogFontEx = TEnumLogFontExW;
PEnumLogFontEx = PEnumLogFontExW;
{$ELSE}
ENUMLOGFONTEX = ENUMLOGFONTEXA;
{$EXTERNALSYM ENUMLOGFONTEX}
LPENUMLOGFONTEX = LPENUMLOGFONTEXA;
{$EXTERNALSYM LPENUMLOGFONTEX}
TEnumLogFontEx = TEnumLogFontExA;
PEnumLogFontEx = PEnumLogFontExA;
{$ENDIF}

const
OUT_DEFAULT_PRECIS = 0;
{$EXTERNALSYM OUT_DEFAULT_PRECIS}
OUT_STRING_PRECIS = 1;
{$EXTERNALSYM OUT_STRING_PRECIS}
OUT_CHARACTER_PRECIS = 2;
{$EXTERNALSYM OUT_CHARACTER_PRECIS}
OUT_STROKE_PRECIS = 3;
{$EXTERNALSYM OUT_STROKE_PRECIS}
OUT_TT_PRECIS = 4;
{$EXTERNALSYM OUT_TT_PRECIS}
OUT_DEVICE_PRECIS = 5;
{$EXTERNALSYM OUT_DEVICE_PRECIS}
OUT_RASTER_PRECIS = 6;
{$EXTERNALSYM OUT_RASTER_PRECIS}
OUT_TT_ONLY_PRECIS = 7;
{$EXTERNALSYM OUT_TT_ONLY_PRECIS}
OUT_OUTLINE_PRECIS = 8;
{$EXTERNALSYM OUT_OUTLINE_PRECIS}
OUT_SCREEN_OUTLINE_PRECIS = 9;
{$EXTERNALSYM OUT_SCREEN_OUTLINE_PRECIS}
OUT_PS_ONLY_PRECIS = 10;
{$EXTERNALSYM OUT_PS_ONLY_PRECIS}

CLIP_DEFAULT_PRECIS = 0;
{$EXTERNALSYM CLIP_DEFAULT_PRECIS}
CLIP_CHARACTER_PRECIS = 1;
{$EXTERNALSYM CLIP_CHARACTER_PRECIS}
CLIP_STROKE_PRECIS = 2;
{$EXTERNALSYM CLIP_STROKE_PRECIS}
CLIP_MASK = $f;
{$EXTERNALSYM CLIP_MASK}
CLIP_LH_ANGLES = (1 shl 4);
{$EXTERNALSYM CLIP_LH_ANGLES}
CLIP_TT_ALWAYS = (2 shl 4);
{$EXTERNALSYM CLIP_TT_ALWAYS}
CLIP_EMBEDDED = (8 shl 4);
{$EXTERNALSYM CLIP_EMBEDDED}

DEFAULT_QUALITY = 0;
{$EXTERNALSYM DEFAULT_QUALITY}
DRAFT_QUALITY = 1;
{$EXTERNALSYM DRAFT_QUALITY}
PROOF_QUALITY = 2;
{$EXTERNALSYM PROOF_QUALITY}
NONANTIALIASED_QUALITY = 3;
{$EXTERNALSYM NONANTIALIASED_QUALITY}
ANTIALIASED_QUALITY = 4;
{$EXTERNALSYM ANTIALIASED_QUALITY}
CLEARTYPE_QUALITY = 5;
{$EXTERNALSYM CLEARTYPE_QUALITY}

//#if (_WIN32_WINNT >= 0x0501)
CLEARTYPE_NATURAL_QUALITY = 6;
{$EXTERNALSYM CLEARTYPE_NATURAL_QUALITY}
//#endif

DEFAULT_PITCH = 0;
{$EXTERNALSYM DEFAULT_PITCH}
FIXED_PITCH = 1;
{$EXTERNALSYM FIXED_PITCH}
VARIABLE_PITCH = 2;
{$EXTERNALSYM VARIABLE_PITCH}
MONO_FONT = 8;
{$EXTERNALSYM MONO_FONT}

ANSI_CHARSET = 0;
{$EXTERNALSYM ANSI_CHARSET}
DEFAULT_CHARSET = 1;
{$EXTERNALSYM DEFAULT_CHARSET}
SYMBOL_CHARSET = 2;
{$EXTERNALSYM SYMBOL_CHARSET}
SHIFTJIS_CHARSET = 128;
{$EXTERNALSYM SHIFTJIS_CHARSET}
HANGEUL_CHARSET = 129;
{$EXTERNALSYM HANGEUL_CHARSET}
HANGUL_CHARSET = 129;
{$EXTERNALSYM HANGUL_CHARSET}
GB2312_CHARSET = 134;
{$EXTERNALSYM GB2312_CHARSET}
CHINESEBIG5_CHARSET = 136;
{$EXTERNALSYM CHINESEBIG5_CHARSET}
OEM_CHARSET = 255;
{$EXTERNALSYM OEM_CHARSET}
JOHAB_CHARSET = 130;
{$EXTERNALSYM JOHAB_CHARSET}
HEBREW_CHARSET = 177;
{$EXTERNALSYM HEBREW_CHARSET}
ARABIC_CHARSET = 178;
{$EXTERNALSYM ARABIC_CHARSET}
GREEK_CHARSET = 161;
{$EXTERNALSYM GREEK_CHARSET}
TURKISH_CHARSET = 162;
{$EXTERNALSYM TURKISH_CHARSET}
VIETNAMESE_CHARSET = 163;
{$EXTERNALSYM VIETNAMESE_CHARSET}
THAI_CHARSET = 222;
{$EXTERNALSYM THAI_CHARSET}
EASTEUROPE_CHARSET = 238;
{$EXTERNALSYM EASTEUROPE_CHARSET}
RUSSIAN_CHARSET = 204;
{$EXTERNALSYM RUSSIAN_CHARSET}

MAC_CHARSET = 77;
{$EXTERNALSYM MAC_CHARSET}
BALTIC_CHARSET = 186;
{$EXTERNALSYM BALTIC_CHARSET}

FS_LATIN1 = $00000001;
{$EXTERNALSYM FS_LATIN1}
FS_LATIN2 = $00000002;
{$EXTERNALSYM FS_LATIN2}
FS_CYRILLIC = $00000004;
{$EXTERNALSYM FS_CYRILLIC}
FS_GREEK = $00000008;
{$EXTERNALSYM FS_GREEK}
FS_TURKISH = $00000010;
{$EXTERNALSYM FS_TURKISH}
FS_HEBREW = $00000020;
{$EXTERNALSYM FS_HEBREW}
FS_ARABIC = $00000040;
{$EXTERNALSYM FS_ARABIC}
FS_BALTIC = $00000080;
{$EXTERNALSYM FS_BALTIC}
FS_VIETNAMESE = $00000100;
{$EXTERNALSYM FS_VIETNAMESE}
FS_THAI = $00010000;
{$EXTERNALSYM FS_THAI}
FS_JISJAPAN = $00020000;
{$EXTERNALSYM FS_JISJAPAN}
FS_CHINESESIMP = $00040000;
{$EXTERNALSYM FS_CHINESESIMP}
FS_WANSUNG = $00080000;
{$EXTERNALSYM FS_WANSUNG}
FS_CHINESETRAD = $00100000;
{$EXTERNALSYM FS_CHINESETRAD}
FS_JOHAB = $00200000;
{$EXTERNALSYM FS_JOHAB}
FS_SYMBOL = $80000000;


{$EXTERNALSYM FS_SYMBOL}

// Font Families

FF_DONTCARE = (0 shl 4); // Don''t care or don''t know.
{$EXTERNALSYM FF_DONTCARE}
FF_ROMAN = (1 shl 4); // Variable stroke width, serifed.
{$EXTERNALSYM FF_ROMAN}
// Times Roman, Century Schoolbook, etc.
FF_SWISS = (2 shl 4); // Variable stroke width, sans-serifed.
{$EXTERNALSYM FF_SWISS}
// Helvetica, Swiss, etc.
FF_MODERN = (3 shl 4); // Constant stroke width, serifed or sans-serifed.
{$EXTERNALSYM FF_MODERN}
// Pica, Elite, Courier, etc.
FF_SCRIPT = (4 shl 4); // Cursive, etc.
{$EXTERNALSYM FF_SCRIPT}
FF_DECORATIVE = (5 shl 4); // Old English, etc.
{$EXTERNALSYM FF_DECORATIVE}

// Font Weights

FW_DONTCARE = 0;
{$EXTERNALSYM FW_DONTCARE}
FW_THIN = 100;
{$EXTERNALSYM FW_THIN}
FW_EXTRALIGHT = 200;
{$EXTERNALSYM FW_EXTRALIGHT}
FW_LIGHT = 300;

{$EXTERNALSYM FW_LIGHT}
FW_NORMAL = 400;
{$EXTERNALSYM FW_NORMAL}
FW_MEDIUM = 500;
{$EXTERNALSYM FW_MEDIUM}
FW_SEMIBOLD = 600;
{$EXTERNALSYM FW_SEMIBOLD}
FW_BOLD = 700;
{$EXTERNALSYM FW_BOLD}
FW_EXTRABOLD = 800;
{$EXTERNALSYM FW_EXTRABOLD}
FW_HEAVY = 900;
{$EXTERNALSYM FW_HEAVY}

FW_ULTRALIGHT = FW_EXTRALIGHT;
{$EXTERNALSYM FW_ULTRALIGHT}
FW_REGULAR = FW_NORMAL;
{$EXTERNALSYM FW_REGULAR}
FW_DEMIBOLD = FW_SEMIBOLD;
{$EXTERNALSYM FW_DEMIBOLD}
FW_ULTRABOLD = FW_EXTRABOLD;
{$EXTERNALSYM FW_ULTRABOLD}
FW_BLACK = FW_HEAVY;
{$EXTERNALSYM FW_BLACK}

PANOSE_COUNT = 10;
{$EXTERNALSYM PANOSE_COUNT}
PAN_FAMILYTYPE_INDEX = 0;
{$EXTERNALSYM PAN_FAMILYTYPE_INDEX}
PAN_SERIFSTYLE_INDEX = 1;
{$EXTERNALSYM PAN_SERIFSTYLE_INDEX}
PAN_WEIGHT_INDEX = 2;
{$EXTERNALSYM PAN_WEIGHT_INDEX}
PAN_PROPORTION_INDEX = 3;

{$EXTERNALSYM PAN_PROPORTION_INDEX}
PAN_CONTRAST_INDEX = 4;
{$EXTERNALSYM PAN_CONTRAST_INDEX}
PAN_STROKEVARIATION_INDEX = 5;
{$EXTERNALSYM PAN_STROKEVARIATION_INDEX}
PAN_ARMSTYLE_INDEX = 6;
{$EXTERNALSYM PAN_ARMSTYLE_INDEX}
PAN_LETTERFORM_INDEX = 7;
{$EXTERNALSYM PAN_LETTERFORM_INDEX}
PAN_MIDLINE_INDEX = 8;
{$EXTERNALSYM PAN_MIDLINE_INDEX}
PAN_XHEIGHT_INDEX = 9;
{$EXTERNALSYM PAN_XHEIGHT_INDEX}

PAN_CULTURE_LATIN = 0;
{$EXTERNALSYM PAN_CULTURE_LATIN}

type
PPanose = ^TPanose;
tagPANOSE = record
bFamilyType: BYTE;
bSerifStyle: BYTE;
bWeight: BYTE;
bProportion: BYTE;
bContrast: BYTE;
bStrokeVariation: BYTE;
bArmStyle: BYTE;
bLetterform: BYTE;
bMidline: BYTE;
bXHeight: BYTE;
end;
{$EXTERNALSYM tagPANOSE}
PANOSE = tagPANOSE;
{$EXTERNALSYM PANOSE}
LPPANOSE = ^PANOSE;
{$EXTERNALSYM LPPANOSE}
TPanose = PANOSE;

const
PAN_ANY = 0; // Any
{$EXTERNALSYM PAN_ANY}
PAN_NO_FIT = 1; // No Fit
{$EXTERNALSYM PAN_NO_FIT}

PAN_FAMILY_TEXT_DISPLAY = 2; // Text and Display
{$EXTERNALSYM PAN_FAMILY_TEXT_DISPLAY}
PAN_FAMILY_SCRIPT = 3; // Script
{$EXTERNALSYM PAN_FAMILY_SCRIPT}
PAN_FAMILY_DECORATIVE = 4; // Decorative
{$EXTERNALSYM PAN_FAMILY_DECORATIVE}
PAN_FAMILY_PICTORIAL = 5; // Pictorial
{$EXTERNALSYM PAN_FAMILY_PICTORIAL}

PAN_SERIF_COVE = 2; // Cove
{$EXTERNALSYM PAN_SERIF_COVE}
PAN_SERIF_OBTUSE_COVE = 3; // Obtuse Cove
{$EXTERNALSYM PAN_SERIF_OBTUSE_COVE}
PAN_SERIF_SQUARE_COVE = 4; // Square Cove
{$EXTERNALSYM PAN_SERIF_SQUARE_COVE}
PAN_SERIF_OBTUSE_SQUARE_COVE = 5; // Obtuse Square Cove
{$EXTERNALSYM PAN_SERIF_OBTUSE_SQUARE_COVE}
PAN_SERIF_SQUARE = 6; // Square
{$EXTERNALSYM PAN_SERIF_SQUARE}
PAN_SERIF_THIN = 7; // Thin


{$EXTERNALSYM PAN_SERIF_THIN}
PAN_SERIF_BONE = 8; // Bone
{$EXTERNALSYM PAN_SERIF_BONE}
PAN_SERIF_EXAGGERATED = 9; // Exaggerated
{$EXTERNALSYM PAN_SERIF_EXAGGERATED}
PAN_SERIF_TRIANGLE = 10; // Triangle
{$EXTERNALSYM PAN_SERIF_TRIANGLE}
PAN_SERIF_NORMAL_SANS = 11; // Normal Sans
{$EXTERNALSYM PAN_SERIF_NORMAL_SANS}
PAN_SERIF_OBTUSE_SANS = 12; // Obtuse Sans
{$EXTERNALSYM PAN_SERIF_OBTUSE_SANS}
PAN_SERIF_PERP_SANS = 13; // Prep Sans
{$EXTERNALSYM PAN_SERIF_PERP_SANS}
PAN_SERIF_FLARED = 14; // Flared
{$EXTERNALSYM PAN_SERIF_FLARED}
PAN_SERIF_ROUNDED = 15; // Rounded
{$EXTERNALSYM PAN_SERIF_ROUNDED}

PAN_WEIGHT_VERY_LIGHT = 2; // Very Light
{$EXTERNALSYM PAN_WEIGHT_VERY_LIGHT}
PAN_WEIGHT_LIGHT = 3; // Light
{$EXTERNALSYM PAN_WEIGHT_LIGHT}
PAN_WEIGHT_THIN = 4; // Thin
{$EXTERNALSYM PAN_WEIGHT_THIN}
PAN_WEIGHT_BOOK = 5; // Book

{$EXTERNALSYM PAN_WEIGHT_BOOK}
PAN_WEIGHT_MEDIUM = 6; // Medium
{$EXTERNALSYM PAN_WEIGHT_MEDIUM}
PAN_WEIGHT_DEMI = 7; // Demi
{$EXTERNALSYM PAN_WEIGHT_DEMI}
PAN_WEIGHT_BOLD = 8; // Bold
{$EXTERNALSYM PAN_WEIGHT_BOLD}
PAN_WEIGHT_HEAVY = 9; // Heavy
{$EXTERNALSYM PAN_WEIGHT_HEAVY}
PAN_WEIGHT_BLACK = 10; // Black
{$EXTERNALSYM PAN_WEIGHT_BLACK}
PAN_WEIGHT_NORD = 11; // Nord
{$EXTERNALSYM PAN_WEIGHT_NORD}

PAN_PROP_OLD_STYLE = 2; // Old Style
{$EXTERNALSYM PAN_PROP_OLD_STYLE}
PAN_PROP_MODERN = 3; // Modern
{$EXTERNALSYM PAN_PROP_MODERN}
PAN_PROP_EVEN_WIDTH = 4; // Even Width
{$EXTERNALSYM PAN_PROP_EVEN_WIDTH}
PAN_PROP_EXPANDED = 5; // Expanded
{$EXTERNALSYM PAN_PROP_EXPANDED}
PAN_PROP_CONDENSED = 6; // Condensed
{$EXTERNALSYM PAN_PROP_CONDENSED}
PAN_PROP_VERY_EXPANDED = 7; // Very Expanded
{$EXTERNALSYM PAN_PROP_VERY_EXPANDED}
PAN_PROP_VERY_CONDENSED = 8; // Very Condensed


{$EXTERNALSYM PAN_PROP_VERY_CONDENSED}
PAN_PROP_MONOSPACED = 9; // Monospaced
{$EXTERNALSYM PAN_PROP_MONOSPACED}

PAN_CONTRAST_NONE = 2; // None
{$EXTERNALSYM PAN_CONTRAST_NONE}
PAN_CONTRAST_VERY_LOW = 3; // Very Low
{$EXTERNALSYM PAN_CONTRAST_VERY_LOW}
PAN_CONTRAST_LOW = 4; // Low
{$EXTERNALSYM PAN_CONTRAST_LOW}
PAN_CONTRAST_MEDIUM_LOW = 5; // Medium Low
{$EXTERNALSYM PAN_CONTRAST_MEDIUM_LOW}
PAN_CONTRAST_MEDIUM = 6; // Medium
{$EXTERNALSYM PAN_CONTRAST_MEDIUM}
PAN_CONTRAST_MEDIUM_HIGH = 7; // Mediim High
{$EXTERNALSYM PAN_CONTRAST_MEDIUM_HIGH}
PAN_CONTRAST_HIGH = 8; // High
{$EXTERNALSYM PAN_CONTRAST_HIGH}
PAN_CONTRAST_VERY_HIGH = 9; // Very High
{$EXTERNALSYM PAN_CONTRAST_VERY_HIGH}

PAN_STROKE_GRADUAL_DIAG = 2; // Gradual/Diagonal
{$EXTERNALSYM PAN_STROKE_GRADUAL_DIAG}
PAN_STROKE_GRADUAL_TRAN = 3; // Gradual/Transitional
{$EXTERNALSYM PAN_STROKE_GRADUAL_TRAN}


PAN_STROKE_GRADUAL_VERT = 4; // Gradual/Vertical
{$EXTERNALSYM PAN_STROKE_GRADUAL_VERT}
PAN_STROKE_GRADUAL_HORZ = 5; // Gradual/Horizontal
{$EXTERNALSYM PAN_STROKE_GRADUAL_HORZ}
PAN_STROKE_RAPID_VERT = 6; // Rapid/Vertical
{$EXTERNALSYM PAN_STROKE_RAPID_VERT}
PAN_STROKE_RAPID_HORZ = 7; // Rapid/Horizontal
{$EXTERNALSYM PAN_STROKE_RAPID_HORZ}
PAN_STROKE_INSTANT_VERT = 8; // Instant/Vertical
{$EXTERNALSYM PAN_STROKE_INSTANT_VERT}

PAN_STRAIGHT_ARMS_HORZ = 2; // Straight Arms/Horizontal
{$EXTERNALSYM PAN_STRAIGHT_ARMS_HORZ}
PAN_STRAIGHT_ARMS_WEDGE = 3; // Straight Arms/Wedge
{$EXTERNALSYM PAN_STRAIGHT_ARMS_WEDGE}
PAN_STRAIGHT_ARMS_VERT = 4; // Straight Arms/Vertical
{$EXTERNALSYM PAN_STRAIGHT_ARMS_VERT}
PAN_STRAIGHT_ARMS_SINGLE_SERIF = 5; // Straight Arms/Single-Serif
{$EXTERNALSYM PAN_STRAIGHT_ARMS_SINGLE_SERIF}
PAN_STRAIGHT_ARMS_DOUBLE_SERIF = 6; // Straight Arms/Double-Serif
{$EXTERNALSYM PAN_STRAIGHT_ARMS_DOUBLE_SERIF}


PAN_BENT_ARMS_HORZ = 7; // Non-Straight Arms/Horizontal
{$EXTERNALSYM PAN_BENT_ARMS_HORZ}
PAN_BENT_ARMS_WEDGE = 8; // Non-Straight Arms/Wedge
{$EXTERNALSYM PAN_BENT_ARMS_WEDGE}
PAN_BENT_ARMS_VERT = 9; // Non-Straight Arms/Vertical
{$EXTERNALSYM PAN_BENT_ARMS_VERT}
PAN_BENT_ARMS_SINGLE_SERIF = 10; // Non-Straight Arms/Single-Serif
{$EXTERNALSYM PAN_BENT_ARMS_SINGLE_SERIF}
PAN_BENT_ARMS_DOUBLE_SERIF = 11; // Non-Straight Arms/Double-Serif
{$EXTERNALSYM PAN_BENT_ARMS_DOUBLE_SERIF}

PAN_LETT_NORMAL_CONTACT = 2; // Normal/Contact
{$EXTERNALSYM PAN_LETT_NORMAL_CONTACT}
PAN_LETT_NORMAL_WEIGHTED = 3; // Normal/Weighted
{$EXTERNALSYM PAN_LETT_NORMAL_WEIGHTED}
PAN_LETT_NORMAL_BOXED = 4; // Normal/Boxed
{$EXTERNALSYM PAN_LETT_NORMAL_BOXED}
PAN_LETT_NORMAL_FLATTENED = 5; // Normal/Flattened
{$EXTERNALSYM PAN_LETT_NORMAL_FLATTENED}
PAN_LETT_NORMAL_ROUNDED = 6; // Normal/Rounded
{$EXTERNALSYM PAN_LETT_NORMAL_ROUNDED}
PAN_LETT_NORMAL_OFF_CENTER = 7; // Normal/Off Center
{$EXTERNALSYM PAN_LETT_NORMAL_OFF_CENTER}
PAN_LETT_NORMAL_SQUARE = 8; // Normal/Square
{$EXTERNALSYM PAN_LETT_NORMAL_SQUARE}
PAN_LETT_OBLIQUE_CONTACT = 9; // Oblique/Contact
{$EXTERNALSYM PAN_LETT_OBLIQUE_CONTACT}
PAN_LETT_OBLIQUE_WEIGHTED = 10; // Oblique/Weighted
{$EXTERNALSYM PAN_LETT_OBLIQUE_WEIGHTED}
PAN_LETT_OBLIQUE_BOXED = 11; // Oblique/Boxed
{$EXTERNALSYM PAN_LETT_OBLIQUE_BOXED}
PAN_LETT_OBLIQUE_FLATTENED = 12; // Oblique/Flattened
{$EXTERNALSYM PAN_LETT_OBLIQUE_FLATTENED}
PAN_LETT_OBLIQUE_ROUNDED = 13; // Oblique/Rounded
{$EXTERNALSYM PAN_LETT_OBLIQUE_ROUNDED}
PAN_LETT_OBLIQUE_OFF_CENTER = 14; // Oblique/Off Center
{$EXTERNALSYM PAN_LETT_OBLIQUE_OFF_CENTER}
PAN_LETT_OBLIQUE_SQUARE = 15; // Oblique/Square
{$EXTERNALSYM PAN_LETT_OBLIQUE_SQUARE}

PAN_MIDLINE_STANDARD_TRIMMED = 2; // Standard/Trimmed
{$EXTERNALSYM PAN_MIDLINE_STANDARD_TRIMMED}
PAN_MIDLINE_STANDARD_POINTED = 3; // Standard/Pointed
{$EXTERNALSYM PAN_MIDLINE_STANDARD_POINTED}
PAN_MIDLINE_STANDARD_SERIFED = 4; // Standard/Serifed
{$EXTERNALSYM PAN_MIDLINE_STANDARD_SERIFED}
PAN_MIDLINE_HIGH_TRIMMED = 5; // High/Trimmed
{$EXTERNALSYM PAN_MIDLINE_HIGH_TRIMMED}
PAN_MIDLINE_HIGH_POINTED = 6; // High/Pointed
{$EXTERNALSYM PAN_MIDLINE_HIGH_POINTED}
PAN_MIDLINE_HIGH_SERIFED = 7; // High/Serifed
{$EXTERNALSYM PAN_MIDLINE_HIGH_SERIFED}
PAN_MIDLINE_CONSTANT_TRIMMED = 8; // Constant/Trimmed
{$EXTERNALSYM PAN_MIDLINE_CONSTANT_TRIMMED}
PAN_MIDLINE_CONSTANT_POINTED = 9; // Constant/Pointed
{$EXTERNALSYM PAN_MIDLINE_CONSTANT_POINTED}
PAN_MIDLINE_CONSTANT_SERIFED = 10; // Constant/Serifed
{$EXTERNALSYM PAN_MIDLINE_CONSTANT_SERIFED}
PAN_MIDLINE_LOW_TRIMMED = 11; // Low/Trimmed
{$EXTERNALSYM PAN_MIDLINE_LOW_TRIMMED}
PAN_MIDLINE_LOW_POINTED = 12; // Low/Pointed
{$EXTERNALSYM PAN_MIDLINE_LOW_POINTED}
PAN_MIDLINE_LOW_SERIFED = 13; // Low/Serifed
{$EXTERNALSYM PAN_MIDLINE_LOW_SERIFED}

PAN_XHEIGHT_CONSTANT_SMALL = 2; // Constant/Small
{$EXTERNALSYM PAN_XHEIGHT_CONSTANT_SMALL}
PAN_XHEIGHT_CONSTANT_STD = 3; // Constant/Standard
{$EXTERNALSYM PAN_XHEIGHT_CONSTANT_STD}
PAN_XHEIGHT_CONSTANT_LARGE = 4; // Constant/Large
{$EXTERNALSYM PAN_XHEIGHT_CONSTANT_LARGE}
PAN_XHEIGHT_DUCKING_SMALL = 5; // Ducking/Small
{$EXTERNALSYM PAN_XHEIGHT_DUCKING_SMALL}
PAN_XHEIGHT_DUCKING_STD = 6; // Ducking/Standard
{$EXTERNALSYM PAN_XHEIGHT_DUCKING_STD}
PAN_XHEIGHT_DUCKING_LARGE = 7; // Ducking/Large
{$EXTERNALSYM PAN_XHEIGHT_DUCKING_LARGE}

ELF_VENDOR_SIZE = 4;
{$EXTERNALSYM ELF_VENDOR_SIZE}

// The extended logical font
// An extension of the ENUMLOGFONT

type
PExtLogFontA = ^TExtLogFontA;
tagEXTLOGFONTA = record
elfLogFont: LOGFONTA;
elfFullName: array [0..LF_FULLFACESIZE - 1] of BYTE;


elfStyle: array [0..LF_FACESIZE - 1] of BYTE;
elfVersion: DWORD;
elfStyleSize: DWORD;
elfMatch: DWORD;
elfReserved: DWORD;
elfVendorId: array [0..ELF_VENDOR_SIZE - 1] of BYTE;
elfCulture: DWORD;
elfPanose: PANOSE;
end;
{$EXTERNALSYM tagEXTLOGFONTA}
EXTLOGFONTA = tagEXTLOGFONTA;
{$EXTERNALSYM EXTLOGFONTA}
LPEXTLOGFONTA = ^EXTLOGFONTA;
{$EXTERNALSYM LPEXTLOGFONTA}
NPEXTLOGFONTA = ^EXTLOGFONTA;
{$EXTERNALSYM NPEXTLOGFONTA}
TExtLogFontA = EXTLOGFONTA;

PExtLogFontW = ^TExtLogFontW;
tagEXTLOGFONTW = record
elfLogFont: LOGFONTW;
elfFullName: array [0..LF_FULLFACESIZE - 1] of WCHAR;
elfStyle: array [0..LF_FACESIZE - 1] of WCHAR;
elfVersion: DWORD;
elfStyleSize: DWORD;
elfMatch: DWORD;
elfReserved: DWORD;
elfVendorId: array [0..ELF_VENDOR_SIZE - 1] of BYTE;
elfCulture: DWORD;
elfPanose: PANOSE;
end;
{$EXTERNALSYM tagEXTLOGFONTW}


EXTLOGFONTW = tagEXTLOGFONTW;
{$EXTERNALSYM EXTLOGFONTW}
LPEXTLOGFONTW = ^EXTLOGFONTW;
{$EXTERNALSYM LPEXTLOGFONTW}
NPEXTLOGFONTW = ^EXTLOGFONTW;
{$EXTERNALSYM NPEXTLOGFONTW}
TExtLogFontW = EXTLOGFONTW;

{$IFDEF UNICODE}
EXTLOGFONT = EXTLOGFONTW;
{$EXTERNALSYM EXTLOGFONT}
PEXTLOGFONT = PEXTLOGFONTW;
{$EXTERNALSYM PEXTLOGFONT}
NPEXTLOGFONT = NPEXTLOGFONTW;
{$EXTERNALSYM NPEXTLOGFONT}
LPEXTLOGFONT = LPEXTLOGFONTW;
{$EXTERNALSYM LPEXTLOGFONT}
TExtLogFont = TExtLogFontW;
{$ELSE}
EXTLOGFONT = EXTLOGFONTA;
{$EXTERNALSYM EXTLOGFONT}
PEXTLOGFONT = PEXTLOGFONTA;
{$EXTERNALSYM PEXTLOGFONT}
NPEXTLOGFONT = NPEXTLOGFONTA;
{$EXTERNALSYM NPEXTLOGFONT}
LPEXTLOGFONT = LPEXTLOGFONTA;
{$EXTERNALSYM LPEXTLOGFONT}
TExtLogFont = TExtLogFontA;
{$ENDIF}

const
ELF_VERSION = 0;
{$EXTERNALSYM ELF_VERSION}
ELF_CULTURE_LATIN = 0;
{$EXTERNALSYM ELF_CULTURE_LATIN}

// EnumFonts Masks

RASTER_FONTTYPE = $0001;
{$EXTERNALSYM RASTER_FONTTYPE}
DEVICE_FONTTYPE = $002;
{$EXTERNALSYM DEVICE_FONTTYPE}
TRUETYPE_FONTTYPE = $004;
{$EXTERNALSYM TRUETYPE_FONTTYPE}

function RGB(r, g, b: BYTE): COLORREF;
{$EXTERNALSYM RGB}
function PALETTERGB(r, g, b: BYTE): COLORREF;
{$EXTERNALSYM PALETTERGB}
function PALETTEINDEX(i: WORD): COLORREF;
{$EXTERNALSYM PALETTEINDEX}

// palette entry flags

const
PC_RESERVED = $01; // palette index used for animation
{$EXTERNALSYM PC_RESERVED}
PC_EXPLICIT = $02; // palette index is explicit to device
{$EXTERNALSYM PC_EXPLICIT}
PC_NOCOLLAPSE = $04; // do not match color to system palette
{$EXTERNALSYM PC_NOCOLLAPSE}

function GetRValue(rgb: COLORREF): BYTE;
{$EXTERNALSYM GetRValue}
function GetGValue(rgb: COLORREF): BYTE;
{$EXTERNALSYM GetGValue}
function GetBValue(rgb: COLORREF): BYTE;
{$EXTERNALSYM GetBValue}

// Background Modes

const
TRANSPARENT = 1;
{$EXTERNALSYM TRANSPARENT}
OPAQUE = 2;
{$EXTERNALSYM OPAQUE}
BKMODE_LAST = 2;
{$EXTERNALSYM BKMODE_LAST}

// Graphics Modes

GM_COMPATIBLE = 1;
{$EXTERNALSYM GM_COMPATIBLE}
GM_ADVANCED = 2;
{$EXTERNALSYM GM_ADVANCED}
GM_LAST = 2;
{$EXTERNALSYM GM_LAST}

// PolyDraw and GetPath point types

PT_CLOSEFIGURE = $01;
{$EXTERNALSYM PT_CLOSEFIGURE}
PT_LINETO = $02;
{$EXTERNALSYM PT_LINETO}
PT_BEZIERTO = $04;
{$EXTERNALSYM PT_BEZIERTO}
PT_MOVETO = $06;
{$EXTERNALSYM PT_MOVETO}

// Mapping Modes

MM_TEXT = 1;
{$EXTERNALSYM MM_TEXT}
MM_LOMETRIC = 2;
{$EXTERNALSYM MM_LOMETRIC}
MM_HIMETRIC = 3;
{$EXTERNALSYM MM_HIMETRIC}
MM_LOENGLISH = 4;
{$EXTERNALSYM MM_LOENGLISH}
MM_HIENGLISH = 5;
{$EXTERNALSYM MM_HIENGLISH}
MM_TWIPS = 6;
{$EXTERNALSYM MM_TWIPS}
MM_ISOTROPIC = 7;
{$EXTERNALSYM MM_ISOTROPIC}

MM_ANISOTROPIC = 8;
{$EXTERNALSYM MM_ANISOTROPIC}

// Min and Max Mapping Mode values

MM_MIN = MM_TEXT;
{$EXTERNALSYM MM_MIN}
MM_MAX = MM_ANISOTROPIC;
{$EXTERNALSYM MM_MAX}
MM_MAX_FIXEDSCALE = MM_TWIPS;
{$EXTERNALSYM MM_MAX_FIXEDSCALE}

// Coordinate Modes

ABSOLUTE = 1;
{$EXTERNALSYM ABSOLUTE}
RELATIVE = 2;
{$EXTERNALSYM RELATIVE}

// Stock Logical Objects

WHITE_BRUSH = 0;
{$EXTERNALSYM WHITE_BRUSH}
LTGRAY_BRUSH = 1;
{$EXTERNALSYM LTGRAY_BRUSH}
GRAY_BRUSH = 2;
{$EXTERNALSYM GRAY_BRUSH}
DKGRAY_BRUSH = 3;
{$EXTERNALSYM DKGRAY_BRUSH}
BLACK_BRUSH = 4;
{$EXTERNALSYM BLACK_BRUSH}
NULL_BRUSH = 5;
{$EXTERNALSYM NULL_BRUSH}
HOLLOW_BRUSH = NULL_BRUSH;
{$EXTERNALSYM HOLLOW_BRUSH}
WHITE_PEN = 6;
{$EXTERNALSYM WHITE_PEN}
BLACK_PEN = 7;
{$EXTERNALSYM BLACK_PEN}


NULL_PEN = 8;
{$EXTERNALSYM NULL_PEN}
OEM_FIXED_FONT = 10;
{$EXTERNALSYM OEM_FIXED_FONT}
ANSI_FIXED_FONT = 11;
{$EXTERNALSYM ANSI_FIXED_FONT}
ANSI_VAR_FONT = 12;
{$EXTERNALSYM ANSI_VAR_FONT}
SYSTEM_FONT = 13;
{$EXTERNALSYM SYSTEM_FONT}
DEVICE_DEFAULT_FONT = 14;
{$EXTERNALSYM DEVICE_DEFAULT_FONT}
DEFAULT_PALETTE = 15;
{$EXTERNALSYM DEFAULT_PALETTE}
SYSTEM_FIXED_FONT = 16;
{$EXTERNALSYM SYSTEM_FIXED_FONT}

DEFAULT_GUI_FONT = 17;
{$EXTERNALSYM DEFAULT_GUI_FONT}

DC_BRUSH = 18;
{$EXTERNALSYM DC_BRUSH}
DC_PEN = 19;
{$EXTERNALSYM DC_PEN}

{$IFDEF WIN32_WINNT_0500_GREATER}
STOCK_LAST = 19;
{$EXTERNALSYM STOCK_LAST}
{$ELSE}
{$IFDEF WINVER_0400_GREATER}
STOCK_LAST = 17;
{$EXTERNALSYM STOCK_LAST}
{$ELSE}
STOCK_LAST = 16;
{$EXTERNALSYM STOCK_LAST}
{$ENDIF}
{$ENDIF}

CLR_INVALID = DWORD($FFFFFFFF);
{$EXTERNALSYM CLR_INVALID}

// Brush Styles

BS_SOLID = 0;
{$EXTERNALSYM BS_SOLID}
BS_NULL = 1;
{$EXTERNALSYM BS_NULL}
BS_HOLLOW = BS_NULL;
{$EXTERNALSYM BS_HOLLOW}
BS_HATCHED = 2;
{$EXTERNALSYM BS_HATCHED}
BS_PATTERN = 3;
{$EXTERNALSYM BS_PATTERN}
BS_INDEXED = 4;
{$EXTERNALSYM BS_INDEXED}
BS_DIBPATTERN = 5;
{$EXTERNALSYM BS_DIBPATTERN}
BS_DIBPATTERNPT = 6;
{$EXTERNALSYM BS_DIBPATTERNPT}
BS_PATTERN8X8 = 7;
{$EXTERNALSYM BS_PATTERN8X8}
BS_DIBPATTERN8X8 = 8;
{$EXTERNALSYM BS_DIBPATTERN8X8}
BS_MONOPATTERN = 9;
{$EXTERNALSYM BS_MONOPATTERN}

// Hatch Styles

HS_HORIZONTAL = 0; // -----
{$EXTERNALSYM HS_HORIZONTAL}
HS_VERTICAL = 1; // |||||
{$EXTERNALSYM HS_VERTICAL}
HS_FDIAGONAL = 2; // \\\\\
{$EXTERNALSYM HS_FDIAGONAL}
HS_BDIAGONAL = 3; // /////
{$EXTERNALSYM HS_BDIAGONAL}
HS_CROSS = 4; // +++++
{$EXTERNALSYM HS_CROSS}

HS_DIAGCROSS = 5; // xxxxx
{$EXTERNALSYM HS_DIAGCROSS}

// Pen Styles

PS_SOLID = 0;
{$EXTERNALSYM PS_SOLID}
PS_DASH = 1; // -------
{$EXTERNALSYM PS_DASH}
PS_DOT = 2; // .......
{$EXTERNALSYM PS_DOT}
PS_DASHDOT = 3; // _._._._
{$EXTERNALSYM PS_DASHDOT}
PS_DASHDOTDOT = 4; // _.._.._
{$EXTERNALSYM PS_DASHDOTDOT}
PS_NULL = 5;
{$EXTERNALSYM PS_NULL}
PS_INSIDEFRAME = 6;
{$EXTERNALSYM PS_INSIDEFRAME}
PS_USERSTYLE = 7;
{$EXTERNALSYM PS_USERSTYLE}
PS_ALTERNATE = 8;
{$EXTERNALSYM PS_ALTERNATE}
PS_STYLE_MASK = $0000000F;
{$EXTERNALSYM PS_STYLE_MASK}

PS_ENDCAP_ROUND = $00000000;
{$EXTERNALSYM PS_ENDCAP_ROUND}
PS_ENDCAP_SQUARE = $00000100;
{$EXTERNALSYM PS_ENDCAP_SQUARE}
PS_ENDCAP_FLAT = $00000200;
{$EXTERNALSYM PS_ENDCAP_FLAT}
PS_ENDCAP_MASK = $00000F00;
{$EXTERNALSYM PS_ENDCAP_MASK}

PS_JOIN_ROUND = $00000000;
{$EXTERNALSYM PS_JOIN_ROUND}
PS_JOIN_BEVEL = $00001000;
{$EXTERNALSYM PS_JOIN_BEVEL}
PS_JOIN_MITER = $00002000;
{$EXTERNALSYM PS_JOIN_MITER}
PS_JOIN_MASK = $0000F000;
{$EXTERNALSYM PS_JOIN_MASK}

PS_COSMETIC = $00000000;
{$EXTERNALSYM PS_COSMETIC}
PS_GEOMETRIC = $00010000;
{$EXTERNALSYM PS_GEOMETRIC}
PS_TYPE_MASK = $000F0000;
{$EXTERNALSYM PS_TYPE_MASK}

AD_COUNTERCLOCKWISE = 1;
{$EXTERNALSYM AD_COUNTERCLOCKWISE}
AD_CLOCKWISE = 2;
{$EXTERNALSYM AD_CLOCKWISE}

// Device Parameters for GetDeviceCaps()

DRIVERVERSION = 0; // Device driver version
{$EXTERNALSYM DRIVERVERSION}
TECHNOLOGY = 2; // Device classification
{$EXTERNALSYM TECHNOLOGY}
HORZSIZE = 4; // Horizontal size in millimeters
{$EXTERNALSYM HORZSIZE}
VERTSIZE = 6; // Vertical size in millimeters
{$EXTERNALSYM VERTSIZE}
HORZRES = 8; // Horizontal width in pixels
{$EXTERNALSYM HORZRES}
VERTRES = 10; // Vertical height in pixels
{$EXTERNALSYM VERTRES}
BITSPIXEL = 12; // Number of bits per pixel
{$EXTERNALSYM BITSPIXEL}
PLANES = 14; // Number of planes
{$EXTERNALSYM PLANES}
NUMBRUSHES = 16; // Number of brushes the device has
{$EXTERNALSYM NUMBRUSHES}
NUMPENS = 18; // Number of pens the device has
{$EXTERNALSYM NUMPENS}
NUMMARKERS = 20; // Number of markers the device has
{$EXTERNALSYM NUMMARKERS}
NUMFONTS = 22; // Number of fonts the device has
{$EXTERNALSYM NUMFONTS}
NUMCOLORS = 24; // Number of colors the device supports
{$EXTERNALSYM NUMCOLORS}
PDEVICESIZE = 26; // Size required for device descriptor
{$EXTERNALSYM PDEVICESIZE}
CURVECAPS = 28; // Curve capabilities
{$EXTERNALSYM CURVECAPS}
LINECAPS = 30; // Line capabilities
{$EXTERNALSYM LINECAPS}
POLYGONALCAPS = 32; // Polygonal capabilities
{$EXTERNALSYM POLYGONALCAPS}
TEXTCAPS = 34; // Text capabilities

{$EXTERNALSYM TEXTCAPS}
CLIPCAPS = 36; // Clipping capabilities
{$EXTERNALSYM CLIPCAPS}
RASTERCAPS = 38; // Bitblt capabilities
{$EXTERNALSYM RASTERCAPS}
ASPECTX = 40; // Length of the X leg
{$EXTERNALSYM ASPECTX}
ASPECTY = 42; // Length of the Y leg
{$EXTERNALSYM ASPECTY}
ASPECTXY = 44; // Length of the hypotenuse
{$EXTERNALSYM ASPECTXY}

LOGPIXELSX = 88; // Logical pixels/inch in X
{$EXTERNALSYM LOGPIXELSX}
LOGPIXELSY = 90; // Logical pixels/inch in Y
{$EXTERNALSYM LOGPIXELSY}

SIZEPALETTE = 104; // Number of entries in physical palette
{$EXTERNALSYM SIZEPALETTE}
NUMRESERVED = 106; // Number of reserved entries in palette
{$EXTERNALSYM NUMRESERVED}
COLORRES = 108; // Actual color resolution
{$EXTERNALSYM COLORRES}

// Printing related DeviceCaps. These replace the appropriate Escapes

PHYSICALWIDTH = 110; // Physical Width in device units
{$EXTERNALSYM PHYSICALWIDTH}

PHYSICALHEIGHT = 111; // Physical Height in device units
{$EXTERNALSYM PHYSICALHEIGHT}
PHYSICALOFFSETX = 112; // Physical Printable Area x margin
{$EXTERNALSYM PHYSICALOFFSETX}
PHYSICALOFFSETY = 113; // Physical Printable Area y margin
{$EXTERNALSYM PHYSICALOFFSETY}
SCALINGFACTORX = 114; // Scaling factor x
{$EXTERNALSYM SCALINGFACTORX}
SCALINGFACTORY = 115; // Scaling factor y
{$EXTERNALSYM SCALINGFACTORY}

// Display driver specific

VREFRESH = 116; // Current vertical refresh rate of the
{$EXTERNALSYM VREFRESH}
// display device (for displays only) in Hz
DESKTOPVERTRES = 117; // Horizontal width of entire desktop in
{$EXTERNALSYM DESKTOPVERTRES}
// pixels
DESKTOPHORZRES = 118; // Vertical height of entire desktop in
{$EXTERNALSYM DESKTOPHORZRES}
// pixels
BLTALIGNMENT = 119; // Preferred blt alignment
{$EXTERNALSYM BLTALIGNMENT}

SHADEBLENDCAPS = 120; // Shading and blending caps
{$EXTERNALSYM SHADEBLENDCAPS}
COLORMGMTCAPS = 121; // Color Management caps
{$EXTERNALSYM COLORMGMTCAPS}

// Device Capability Masks:

// Device Technologies

DT_PLOTTER = 0; // Vector plotter
{$EXTERNALSYM DT_PLOTTER}
DT_RASDISPLAY = 1; // Raster display
{$EXTERNALSYM DT_RASDISPLAY}
DT_RASPRINTER = 2; // Raster printer
{$EXTERNALSYM DT_RASPRINTER}
DT_RASCAMERA = 3; // Raster camera
{$EXTERNALSYM DT_RASCAMERA}
DT_CHARSTREAM = 4; // Character-stream, PLP
{$EXTERNALSYM DT_CHARSTREAM}
DT_METAFILE = 5; // Metafile, VDM
{$EXTERNALSYM DT_METAFILE}
DT_DISPFILE = 6; // Display-file
{$EXTERNALSYM DT_DISPFILE}

// Curve Capabilities

CC_NONE = 0; // Curves not supported
{$EXTERNALSYM CC_NONE}
CC_CIRCLES = 1; // Can do circles
{$EXTERNALSYM CC_CIRCLES}
CC_PIE = 2; // Can do pie wedges
{$EXTERNALSYM CC_PIE}


CC_CHORD = 4; // Can do chord arcs
{$EXTERNALSYM CC_CHORD}
CC_ELLIPSES = 8; // Can do ellipese
{$EXTERNALSYM CC_ELLIPSES}
CC_WIDE = 16; // Can do wide lines
{$EXTERNALSYM CC_WIDE}
CC_STYLED = 32; // Can do styled lines
{$EXTERNALSYM CC_STYLED}
CC_WIDESTYLED = 64; // Can do wide styled lines
{$EXTERNALSYM CC_WIDESTYLED}
CC_INTERIORS = 128; // Can do interiors
{$EXTERNALSYM CC_INTERIORS}
CC_ROUNDRECT = 256;
{$EXTERNALSYM CC_ROUNDRECT}

// Line Capabilities

LC_NONE = 0; // Lines not supported
{$EXTERNALSYM LC_NONE}
LC_POLYLINE = 2; // Can do polylines
{$EXTERNALSYM LC_POLYLINE}
LC_MARKER = 4; // Can do markers
{$EXTERNALSYM LC_MARKER}
LC_POLYMARKER = 8; // Can do polymarkers
{$EXTERNALSYM LC_POLYMARKER}
LC_WIDE = 16; // Can do wide lines
{$EXTERNALSYM LC_WIDE}
LC_STYLED = 32; // Can do styled lines
{$EXTERNALSYM LC_STYLED}
LC_WIDESTYLED = 64; // Can do wide styled lines
{$EXTERNALSYM LC_WIDESTYLED}
LC_INTERIORS = 128; // Can do interiors
{$EXTERNALSYM LC_INTERIORS}

// Polygonal Capabilities

PC_NONE = 0; // Polygonals not supported
{$EXTERNALSYM PC_NONE}
PC_POLYGON = 1; // Can do polygons
{$EXTERNALSYM PC_POLYGON}
PC_RECTANGLE = 2; // Can do rectangles
{$EXTERNALSYM PC_RECTANGLE}
PC_WINDPOLYGON = 4; // Can do winding polygons
{$EXTERNALSYM PC_WINDPOLYGON}
PC_TRAPEZOID = 4; // Can do trapezoids
{$EXTERNALSYM PC_TRAPEZOID}
PC_SCANLINE = 8; // Can do scanlines
{$EXTERNALSYM PC_SCANLINE}
PC_WIDE = 16; // Can do wide borders
{$EXTERNALSYM PC_WIDE}
PC_STYLED = 32; // Can do styled borders
{$EXTERNALSYM PC_STYLED}
PC_WIDESTYLED = 64; // Can do wide styled borders
{$EXTERNALSYM PC_WIDESTYLED}
PC_INTERIORS = 128; // Can do interiors
{$EXTERNALSYM PC_INTERIORS}
PC_POLYPOLYGON = 256; // Can do polypolygons
{$EXTERNALSYM PC_POLYPOLYGON}

PC_PATHS = 512; // Can do paths
{$EXTERNALSYM PC_PATHS}

// Clipping Capabilities

CP_NONE = 0; // No clipping of output
{$EXTERNALSYM CP_NONE}
CP_RECTANGLE = 1; // Output clipped to rects
{$EXTERNALSYM CP_RECTANGLE}
CP_REGION = 2; // obsolete
{$EXTERNALSYM CP_REGION}

// Text Capabilities

TC_OP_CHARACTER = $00000001; // Can do OutputPrecision CHARACTER
{$EXTERNALSYM TC_OP_CHARACTER}
TC_OP_STROKE = $00000002; // Can do OutputPrecision STROKE
{$EXTERNALSYM TC_OP_STROKE}
TC_CP_STROKE = $00000004; // Can do ClipPrecision STROKE
{$EXTERNALSYM TC_CP_STROKE}
TC_CR_90 = $00000008; // Can do CharRotAbility 90
{$EXTERNALSYM TC_CR_90}
TC_CR_ANY = $00000010; // Can do CharRotAbility ANY
{$EXTERNALSYM TC_CR_ANY}
TC_SF_X_YINDEP = $00000020; // Can do ScaleFreedom X_YINDEPENDENT
{$EXTERNALSYM TC_SF_X_YINDEP}
TC_SA_DOUBLE = $00000040; // Can do ScaleAbility DOUBLE
{$EXTERNALSYM TC_SA_DOUBLE}
TC_SA_INTEGER = $00000080; // Can do ScaleAbility INTEGER
{$EXTERNALSYM TC_SA_INTEGER}
TC_SA_CONTIN = $00000100; // Can do ScaleAbility CONTINUOUS
{$EXTERNALSYM TC_SA_CONTIN}
TC_EA_DOUBLE = $00000200; // Can do EmboldenAbility DOUBLE
{$EXTERNALSYM TC_EA_DOUBLE}
TC_IA_ABLE = $00000400; // Can do ItalisizeAbility ABLE
{$EXTERNALSYM TC_IA_ABLE}
TC_UA_ABLE = $00000800; // Can do UnderlineAbility ABLE
{$EXTERNALSYM TC_UA_ABLE}
TC_SO_ABLE = $00001000; // Can do StrikeOutAbility ABLE
{$EXTERNALSYM TC_SO_ABLE}
TC_RA_ABLE = $00002000; // Can do RasterFontAble ABLE
{$EXTERNALSYM TC_RA_ABLE}
TC_VA_ABLE = $00004000; // Can do VectorFontAble ABLE
{$EXTERNALSYM TC_VA_ABLE}
TC_RESERVED = $00008000;
{$EXTERNALSYM TC_RESERVED}
TC_SCROLLBLT = $00010000; // Don''t do text scroll with blt
{$EXTERNALSYM TC_SCROLLBLT}

// Raster Capabilities



RC_BITBLT = 1; // Can do standard BLT.
{$EXTERNALSYM RC_BITBLT}
RC_BANDING = 2; // Device requires banding support
{$EXTERNALSYM RC_BANDING}
RC_SCALING = 4; // Device requires scaling support
{$EXTERNALSYM RC_SCALING}
RC_BITMAP64 = 8; // Device can support >64K bitmap
{$EXTERNALSYM RC_BITMAP64}
RC_GDI20_OUTPUT = $0010; // has 2.0 output calls
{$EXTERNALSYM RC_GDI20_OUTPUT}
RC_GDI20_STATE = $0020;
{$EXTERNALSYM RC_GDI20_STATE}
RC_SAVEBITMAP = $0040;
{$EXTERNALSYM RC_SAVEBITMAP}
RC_DI_BITMAP = $0080; // supports DIB to memory
{$EXTERNALSYM RC_DI_BITMAP}
RC_PALETTE = $0100; // supports a palette
{$EXTERNALSYM RC_PALETTE}
RC_DIBTODEV = $0200; // supports DIBitsToDevice
{$EXTERNALSYM RC_DIBTODEV}
RC_BIGFONT = $0400; // supports >64K fonts
{$EXTERNALSYM RC_BIGFONT}
RC_STRETCHBLT = $0800; // supports StretchBlt
{$EXTERNALSYM RC_STRETCHBLT}
RC_FLOODFILL = $1000; // supports FloodFill
{$EXTERNALSYM RC_FLOODFILL}
RC_STRETCHDIB = $2000; // supports StretchDIBits
{$EXTERNALSYM RC_STRETCHDIB}
RC_OP_DX_OUTPUT = $4000;
{$EXTERNALSYM RC_OP_DX_OUTPUT}
RC_DEVBITS = $8000;
{$EXTERNALSYM RC_DEVBITS}

// Shading and blending caps

SB_NONE = $00000000;
{$EXTERNALSYM SB_NONE}
SB_CONST_ALPHA = $00000001;
{$EXTERNALSYM SB_CONST_ALPHA}
SB_PIXEL_ALPHA = $00000002;
{$EXTERNALSYM SB_PIXEL_ALPHA}
SB_PREMULT_ALPHA = $00000004;
{$EXTERNALSYM SB_PREMULT_ALPHA}

SB_GRAD_RECT = $00000010;
{$EXTERNALSYM SB_GRAD_RECT}
SB_GRAD_TRI = $00000020;
{$EXTERNALSYM SB_GRAD_TRI}

// Color Management caps

CM_NONE = $00000000;
{$EXTERNALSYM CM_NONE}
CM_DEVICE_ICM = $00000001;
{$EXTERNALSYM CM_DEVICE_ICM}
CM_GAMMA_RAMP = $00000002;
{$EXTERNALSYM CM_GAMMA_RAMP}
CM_CMYK_COLOR = $00000004;
{$EXTERNALSYM CM_CMYK_COLOR}

// DIB color table identifiers

DIB_RGB_COLORS = 0; // color table in RGBs
{$EXTERNALSYM DIB_RGB_COLORS}
DIB_PAL_COLORS = 1; // color table in palette indices
{$EXTERNALSYM DIB_PAL_COLORS}

// constants for Get/SetSystemPaletteUse()

SYSPAL_ERROR = 0;
{$EXTERNALSYM SYSPAL_ERROR}
SYSPAL_STATIC = 1;
{$EXTERNALSYM SYSPAL_STATIC}
SYSPAL_NOSTATIC = 2;
{$EXTERNALSYM SYSPAL_NOSTATIC}
SYSPAL_NOSTATIC256 = 3;
{$EXTERNALSYM SYSPAL_NOSTATIC256}

// constants for CreateDIBitmap

CBM_INIT = $04; // initialize bitmap
{$EXTERNALSYM CBM_INIT}

// ExtFloodFill style flags

FLOODFILLBORDER = 0;
{$EXTERNALSYM FLOODFILLBORDER}
FLOODFILLSURFACE = 1;
{$EXTERNALSYM FLOODFILLSURFACE}

// size of a device name string

CCHDEVICENAME = 32;
{$EXTERNALSYM CCHDEVICENAME}

// size of a form name string

CCHFORMNAME = 32;
{$EXTERNALSYM CCHFORMNAME}


{$IFDEF WINVER_0500_GREATER}
{$IFDEF WIN32_WINNT_0400_GREATER}
{$DEFINE WINVER_0500_OR_WIN32_WINNT_0400}
{$ENDIF}
{$ENDIF}

type
TDmDisplayFlagsUnion = record
case Integer of
0: (
dmDisplayFlags: DWORD);
1: (
dmNup: DWORD);
end;

_devicemodeA = record
dmDeviceName: array [0..CCHDEVICENAME - 1] of BYTE;
dmSpecVersion: WORD;
dmDriverVersion: WORD;
dmSize: WORD;
dmDriverExtra: WORD;
dmFields: DWORD;
union1: record
case Integer of
// printer only fields
0: (
dmOrientation: Smallint;
dmPaperSize: Smallint;
dmPaperLength: Smallint;
dmPaperWidth: Smallint;
dmScale: Smallint;
dmCopies: Smallint;
dmDefaultSource: Smallint;
dmPrintQuality: Smallint);
// display only fields
1: (
dmPosition: POINTL;
dmDisplayOrientation: DWORD;
dmDisplayFixedOutput: DWORD);
end;
dmColor: Shortint;
dmDuplex: Shortint;
dmYResolution: Shortint;
dmTTOption: Shortint;
dmCollate: Shortint;
dmFormName: array [0..CCHFORMNAME - 1] of BYTE;
dmLogPixels: WORD;
dmBitsPerPel: DWORD;
dmPelsWidth: DWORD;
dmPelsHeight: DWORD;
dmDisplayFlags: TDmDisplayFlagsUnion;
dmDisplayFrequency: DWORD;
{$IFDEF WINVER_0400_GREATER}
dmICMMethod: DWORD;
dmICMIntent: DWORD;
dmMediaType: DWORD;
dmDitherType: DWORD;
dmReserved1: DWORD;
dmReserved2: DWORD;
{$IFDEF WINVER_0500_OR_WIN32_WINNT_0400}
dmPanningWidth: DWORD;
dmPanningHeight: DWORD;
{$ENDIF}
{$ENDIF}
end;
{$EXTERNALSYM _devicemodeA}
DEVMODEA = _devicemodeA;
{$EXTERNALSYM DEVMODEA}
PDEVMODEA = ^DEVMODEA;
{$EXTERNALSYM PDEVMODEA}
LPDEVMODEA = ^DEVMODEA;
{$EXTERNALSYM LPDEVMODEA}
NPDEVMODEA = ^DEVMODEA;
{$EXTERNALSYM NPDEVMODEA}
TDevModeA = _devicemodeA;

_devicemodeW = record
dmDeviceName: array [0..CCHDEVICENAME - 1] of WCHAR;
dmSpecVersion: WORD;
dmDriverVersion: WORD;
dmSize: WORD;
dmDriverExtra: WORD;
dmFields: DWORD;
union1: record
case Integer of
// printer only fields
0: (
dmOrientation: Smallint;
dmPaperSize: Smallint;
dmPaperLength: Smallint;
dmPaperWidth: Smallint;
dmScale: Smallint;
dmCopies: Smallint;
dmDefaultSource: Smallint;
dmPrintQuality: Smallint);
// display only fields
1: (
dmPosition: POINTL;
dmDisplayOrientation: DWORD;
dmDisplayFixedOutput: DWORD);
end;
dmColor: Shortint;
dmDuplex: Shortint;
dmYResolution: Shortint;
dmTTOption: Shortint;
dmCollate: Shortint;
dmFormName: array [0..CCHFORMNAME - 1] of WCHAR;
dmLogPixels: WORD;
dmBitsPerPel: DWORD;
dmPelsWidth: DWORD;
dmPelsHeight: DWORD;
dmDiusplayFlags: TDmDisplayFlagsUnion;
dmDisplayFrequency: DWORD;
{$IFDEF WINVER_0400_GREATER}
dmICMMethod: DWORD;
dmICMIntent: DWORD;
dmMediaType: DWORD;
dmDitherType: DWORD;
dmReserved1: DWORD;
dmReserved2: DWORD;
{$IFDEF WINVER_0500_OR_WIN32_WINNT_0400}
dmPanningWidth: DWORD;
dmPanningHeight: DWORD;
{$ENDIF}
{$ENDIF}
end;
{$EXTERNALSYM _devicemodeW}
DEVMODEW = _devicemodeW;
{$EXTERNALSYM DEVMODEW}
PDEVMODEW = ^DEVMODEW;
{$EXTERNALSYM PDEVMODEW}
LPDEVMODEW = ^DEVMODEW;
{$EXTERNALSYM LPDEVMODEW}
NPDEVMODEW = ^DEVMODEW;
{$EXTERNALSYM NPDEVMODEW}
TDevModeW = _devicemodeW;

{$IFDEF UNICODE}
DEVMODE = DEVMODEW;
{$EXTERNALSYM DEVMODE}
PDEVMODE = PDEVMODEW;
{$EXTERNALSYM PDEVMODE}
NPDEVMODE = NPDEVMODEW;
{$EXTERNALSYM NPDEVMODE}
LPDEVMODE = LPDEVMODEW;
{$EXTERNALSYM LPDEVMODE}
TDevMode = TDevModeW;
{$ELSE}
DEVMODE = DEVMODEA;
{$EXTERNALSYM DEVMODE}
PDEVMODE = PDEVMODEA;
{$EXTERNALSYM PDEVMODE}

NPDEVMODE = NPDEVMODEA;
{$EXTERNALSYM NPDEVMODE}
LPDEVMODE = LPDEVMODEA;
{$EXTERNALSYM LPDEVMODE}
TDevMode = TDevModeA;
{$ENDIF}

// current version of specification

const
{$IFDEF WINVER_0500_OR_WIN32_WINNT_0400}
DM_SPECVERSION = $0401;
{$EXTERNALSYM DM_SPECVERSION}
{$ELSE}
{$IFDEF WINVER_0400_GREATER}
DM_SPECVERSION = $0400;
{$EXTERNALSYM DM_SPECVERSION}
{$ELSE}
DM_SPECVERSION = $0320;
{$EXTERNALSYM DM_SPECVERSION}
{$ENDIF}
{$ENDIF}

{$UNDEF WINVER_0500_OR_WIN32_WINNT_0400}

// field selection bits

const
DM_ORIENTATION = $00000001;
{$EXTERNALSYM DM_ORIENTATION}
DM_PAPERSIZE = $00000002;
{$EXTERNALSYM DM_PAPERSIZE}
DM_PAPERLENGTH = $00000004;
{$EXTERNALSYM DM_PAPERLENGTH}
DM_PAPERWIDTH = $00000008;
{$EXTERNALSYM DM_PAPERWIDTH}
DM_SCALE = $00000010;
{$EXTERNALSYM DM_SCALE}
DM_POSITION = $00000020;
{$EXTERNALSYM DM_POSITION}

DM_NUP = $00000040;
{$EXTERNALSYM DM_NUP}
//#if(WINVER >= 0x0501)
DM_DISPLAYORIENTATION = $00000080;
{$EXTERNALSYM DM_DISPLAYORIENTATION}
//#endif /* WINVER >= 0x0501 */
DM_COPIES = $00000100;
{$EXTERNALSYM DM_COPIES}
DM_DEFAULTSOURCE = $00000200;
{$EXTERNALSYM DM_DEFAULTSOURCE}
DM_PRINTQUALITY = $00000400;
{$EXTERNALSYM DM_PRINTQUALITY}
DM_COLOR = $00000800;
{$EXTERNALSYM DM_COLOR}
DM_DUPLEX = $00001000;
{$EXTERNALSYM DM_DUPLEX}
DM_YRESOLUTION = $00002000;
{$EXTERNALSYM DM_YRESOLUTION}
DM_TTOPTION = $00004000;
{$EXTERNALSYM DM_TTOPTION}
DM_COLLATE = $00008000;
{$EXTERNALSYM DM_COLLATE}
DM_FORMNAME = $00010000;
{$EXTERNALSYM DM_FORMNAME}
DM_LOGPIXELS = $00020000;
{$EXTERNALSYM DM_LOGPIXELS}
DM_BITSPERPEL = $00040000;
{$EXTERNALSYM DM_BITSPERPEL}
DM_PELSWIDTH = $00080000;
{$EXTERNALSYM DM_PELSWIDTH}

DM_PELSHEIGHT = $00100000;
{$EXTERNALSYM DM_PELSHEIGHT}
DM_DISPLAYFLAGS = $00200000;
{$EXTERNALSYM DM_DISPLAYFLAGS}
DM_DISPLAYFREQUENCY = $00400000;
{$EXTERNALSYM DM_DISPLAYFREQUENCY}
DM_ICMMETHOD = $00800000;
{$EXTERNALSYM DM_ICMMETHOD}
DM_ICMINTENT = $01000000;
{$EXTERNALSYM DM_ICMINTENT}
DM_MEDIATYPE = $02000000;
{$EXTERNALSYM DM_MEDIATYPE}
DM_DITHERTYPE = $04000000;
{$EXTERNALSYM DM_DITHERTYPE}
DM_PANNINGWIDTH = $08000000;
{$EXTERNALSYM DM_PANNINGWIDTH}
DM_PANNINGHEIGHT = $10000000;
{$EXTERNALSYM DM_PANNINGHEIGHT}
//#if(WINVER >= 0x0501)
DM_DISPLAYFIXEDOUTPUT = $20000000;
{$EXTERNALSYM DM_DISPLAYFIXEDOUTPUT}
//#endif /* WINVER >= 0x0501 */

// orientation selections

DMORIENT_PORTRAIT = 1;
{$EXTERNALSYM DMORIENT_PORTRAIT}
DMORIENT_LANDSCAPE = 2;
{$EXTERNALSYM DMORIENT_LANDSCAPE}

// paper selections

DMPAPER_LETTER = 1; // Letter 8 1/2 x 11 in
{$EXTERNALSYM DMPAPER_LETTER}
DMPAPER_FIRST = DMPAPER_LETTER;
{$EXTERNALSYM DMPAPER_FIRST}
DMPAPER_LETTERSMALL = 2; // Letter Small 8 1/2 x 11 in
{$EXTERNALSYM DMPAPER_LETTERSMALL}
DMPAPER_TABLOID = 3; // Tabloid 11 x 17 in
{$EXTERNALSYM DMPAPER_TABLOID}
DMPAPER_LEDGER = 4; // Ledger 17 x 11 in
{$EXTERNALSYM DMPAPER_LEDGER}
DMPAPER_LEGAL = 5; // Legal 8 1/2 x 14 in
{$EXTERNALSYM DMPAPER_LEGAL}
DMPAPER_STATEMENT = 6; // Statement 5 1/2 x 8 1/2 in
{$EXTERNALSYM DMPAPER_STATEMENT}
DMPAPER_EXECUTIVE = 7; // Executive 7 1/4 x 10 1/2 in
{$EXTERNALSYM DMPAPER_EXECUTIVE}
DMPAPER_A3 = 8; // A3 297 x 420 mm
{$EXTERNALSYM DMPAPER_A3}
DMPAPER_A4 = 9; // A4 210 x 297 mm
{$EXTERNALSYM DMPAPER_A4}
DMPAPER_A4SMALL = 10; // A4 Small 210 x 297 mm
{$EXTERNALSYM DMPAPER_A4SMALL}


DMPAPER_A5 = 11; // A5 148 x 210 mm
{$EXTERNALSYM DMPAPER_A5}
DMPAPER_B4 = 12; // B4 (JIS) 250 x 354
{$EXTERNALSYM DMPAPER_B4}
DMPAPER_B5 = 13; // B5 (JIS) 182 x 257 mm
{$EXTERNALSYM DMPAPER_B5}
DMPAPER_FOLIO = 14; // Folio 8 1/2 x 13 in
{$EXTERNALSYM DMPAPER_FOLIO}
DMPAPER_QUARTO = 15; // Quarto 215 x 275 mm
{$EXTERNALSYM DMPAPER_QUARTO}
DMPAPER_10X14 = 16; // 10x14 in
{$EXTERNALSYM DMPAPER_10X14}
DMPAPER_11X17 = 17; // 11x17 in
{$EXTERNALSYM DMPAPER_11X17}
DMPAPER_NOTE = 18; // Note 8 1/2 x 11 in
{$EXTERNALSYM DMPAPER_NOTE}
DMPAPER_ENV_9 = 19; // Envelope #9 3 7/8 x 8 7/8
{$EXTERNALSYM DMPAPER_ENV_9}
DMPAPER_ENV_10 = 20; // Envelope #10 4 1/8 x 9 1/2
{$EXTERNALSYM DMPAPER_ENV_10}
DMPAPER_ENV_11 = 21; // Envelope #11 4 1/2 x 10 3/8


{$EXTERNALSYM DMPAPER_ENV_11}
DMPAPER_ENV_12 = 22; // Envelope #12 4 \276 x 11
{$EXTERNALSYM DMPAPER_ENV_12}
DMPAPER_ENV_14 = 23; // Envelope #14 5 x 11 1/2
{$EXTERNALSYM DMPAPER_ENV_14}
DMPAPER_CSHEET = 24; // C size sheet
{$EXTERNALSYM DMPAPER_CSHEET}
DMPAPER_DSHEET = 25; // D size sheet
{$EXTERNALSYM DMPAPER_DSHEET}
DMPAPER_ESHEET = 26; // E size sheet
{$EXTERNALSYM DMPAPER_ESHEET}
DMPAPER_ENV_DL = 27; // Envelope DL 110 x 220mm
{$EXTERNALSYM DMPAPER_ENV_DL}
DMPAPER_ENV_C5 = 28; // Envelope C5 162 x 229 mm
{$EXTERNALSYM DMPAPER_ENV_C5}
DMPAPER_ENV_C3 = 29; // Envelope C3 324 x 458 mm
{$EXTERNALSYM DMPAPER_ENV_C3}
DMPAPER_ENV_C4 = 30; // Envelope C4 229 x 324 mm
{$EXTERNALSYM DMPAPER_ENV_C4}
DMPAPER_ENV_C6 = 31; // Envelope C6 114 x 162 mm

{$EXTERNALSYM DMPAPER_ENV_C6}
DMPAPER_ENV_C65 = 32; // Envelope C65 114 x 229 mm
{$EXTERNALSYM DMPAPER_ENV_C65}
DMPAPER_ENV_B4 = 33; // Envelope B4 250 x 353 mm
{$EXTERNALSYM DMPAPER_ENV_B4}
DMPAPER_ENV_B5 = 34; // Envelope B5 176 x 250 mm
{$EXTERNALSYM DMPAPER_ENV_B5}
DMPAPER_ENV_B6 = 35; // Envelope B6 176 x 125 mm
{$EXTERNALSYM DMPAPER_ENV_B6}
DMPAPER_ENV_ITALY = 36; // Envelope 110 x 230 mm
{$EXTERNALSYM DMPAPER_ENV_ITALY}
DMPAPER_ENV_MONARCH = 37; // Envelope Monarch 3.875 x 7.5 in
{$EXTERNALSYM DMPAPER_ENV_MONARCH}
DMPAPER_ENV_PERSONAL = 38; // 6 3/4 Envelope 3 5/8 x 6 1/2 in
{$EXTERNALSYM DMPAPER_ENV_PERSONAL}
DMPAPER_FANFOLD_US = 39; // US Std Fanfold 14 7/8 x 11 in
{$EXTERNALSYM DMPAPER_FANFOLD_US}
DMPAPER_FANFOLD_STD_GERMAN = 40; // German Std Fanfold 8 1/2 x 12 in
{$EXTERNALSYM DMPAPER_FANFOLD_STD_GERMAN}

DMPAPER_FANFOLD_LGL_GERMAN = 41; // German Legal Fanfold 8 1/2 x 13 in
{$EXTERNALSYM DMPAPER_FANFOLD_LGL_GERMAN}
DMPAPER_ISO_B4 = 42; // B4 (ISO) 250 x 353 mm
{$EXTERNALSYM DMPAPER_ISO_B4}
DMPAPER_JAPANESE_POSTCARD = 43; // Japanese Postcard 100 x 148 mm
{$EXTERNALSYM DMPAPER_JAPANESE_POSTCARD}
DMPAPER_9X11 = 44; // 9 x 11 in
{$EXTERNALSYM DMPAPER_9X11}
DMPAPER_10X11 = 45; // 10 x 11 in
{$EXTERNALSYM DMPAPER_10X11}
DMPAPER_15X11 = 46; // 15 x 11 in
{$EXTERNALSYM DMPAPER_15X11}
DMPAPER_ENV_INVITE = 47; // Envelope Invite 220 x 220 mm
{$EXTERNALSYM DMPAPER_ENV_INVITE}
DMPAPER_RESERVED_48 = 48; // RESERVED--DO NOT USE
{$EXTERNALSYM DMPAPER_RESERVED_48}
DMPAPER_RESERVED_49 = 49; // RESERVED--DO NOT USE
{$EXTERNALSYM DMPAPER_RESERVED_49}
DMPAPER_LETTER_EXTRA = 50; // Letter Extra 9 \275 x 12 in
{$EXTERNALSYM DMPAPER_LETTER_EXTRA}
DMPAPER_LEGAL_EXTRA = 51; // Legal Extra 9 \275 x 15 in
{$EXTERNALSYM DMPAPER_LEGAL_EXTRA}
DMPAPER_TABLOID_EXTRA = 52; // Tabloid Extra 11.69 x 18 in
{$EXTERNALSYM DMPAPER_TABLOID_EXTRA}
DMPAPER_A4_EXTRA = 53; // A4 Extra 9.27 x 12.69 in
{$EXTERNALSYM DMPAPER_A4_EXTRA}
DMPAPER_LETTER_TRANSVERSE = 54; // Letter Transverse 8 \275 x 11 in
{$EXTERNALSYM DMPAPER_LETTER_TRANSVERSE}
DMPAPER_A4_TRANSVERSE = 55; // A4 Transverse 210 x 297 mm
{$EXTERNALSYM DMPAPER_A4_TRANSVERSE}
DMPAPER_LETTER_EXTRA_TRANSVERSE = 56; // Letter Extra Transverse 9\275 x 12 in
{$EXTERNALSYM DMPAPER_LETTER_EXTRA_TRANSVERSE}
DMPAPER_A_PLUS = 57; // SuperA/SuperA/A4 227 x 356 mm
{$EXTERNALSYM DMPAPER_A_PLUS}
DMPAPER_B_PLUS = 58; // SuperB/SuperB/A3 305 x 487 mm
{$EXTERNALSYM DMPAPER_B_PLUS}
DMPAPER_LETTER_PLUS = 59; // Letter Plus 8.5 x 12.69 in

{$EXTERNALSYM DMPAPER_LETTER_PLUS}
DMPAPER_A4_PLUS = 60; // A4 Plus 210 x 330 mm
{$EXTERNALSYM DMPAPER_A4_PLUS}
DMPAPER_A5_TRANSVERSE = 61; // A5 Transverse 148 x 210 mm
{$EXTERNALSYM DMPAPER_A5_TRANSVERSE}
DMPAPER_B5_TRANSVERSE = 62; // B5 (JIS) Transverse 182 x 257 mm
{$EXTERNALSYM DMPAPER_B5_TRANSVERSE}
DMPAPER_A3_EXTRA = 63; // A3 Extra 322 x 445 mm
{$EXTERNALSYM DMPAPER_A3_EXTRA}
DMPAPER_A5_EXTRA = 64; // A5 Extra 174 x 235 mm
{$EXTERNALSYM DMPAPER_A5_EXTRA}
DMPAPER_B5_EXTRA = 65; // B5 (ISO) Extra 201 x 276 mm
{$EXTERNALSYM DMPAPER_B5_EXTRA}
DMPAPER_A2 = 66; // A2 420 x 594 mm
{$EXTERNALSYM DMPAPER_A2}
DMPAPER_A3_TRANSVERSE = 67; // A3 Transverse 297 x 420 mm
{$EXTERNALSYM DMPAPER_A3_TRANSVERSE}
DMPAPER_A3_EXTRA_TRANSVERSE = 68; // A3 Extra Transverse 322 x 445 mm
{$EXTERNALSYM DMPAPER_A3_EXTRA_TRANSVERSE}

DMPAPER_DBL_JAPANESE_POSTCARD = 69; // Japanese Double Postcard 200 x 148 mm
{$EXTERNALSYM DMPAPER_DBL_JAPANESE_POSTCARD}
DMPAPER_A6 = 70; // A6 105 x 148 mm
{$EXTERNALSYM DMPAPER_A6}
DMPAPER_JENV_KAKU2 = 71; // Japanese Envelope Kaku #2
{$EXTERNALSYM DMPAPER_JENV_KAKU2}
DMPAPER_JENV_KAKU3 = 72; // Japanese Envelope Kaku #3
{$EXTERNALSYM DMPAPER_JENV_KAKU3}
DMPAPER_JENV_CHOU3 = 73; // Japanese Envelope Chou #3
{$EXTERNALSYM DMPAPER_JENV_CHOU3}
DMPAPER_JENV_CHOU4 = 74; // Japanese Envelope Chou #4
{$EXTERNALSYM DMPAPER_JENV_CHOU4}
DMPAPER_LETTER_ROTATED = 75; // Letter Rotated 11 x 8 1/2 11 in
{$EXTERNALSYM DMPAPER_LETTER_ROTATED}
DMPAPER_A3_ROTATED = 76; // A3 Rotated 420 x 297 mm
{$EXTERNALSYM DMPAPER_A3_ROTATED}
DMPAPER_A4_ROTATED = 77; // A4 Rotated 297 x 210 mm


{$EXTERNALSYM DMPAPER_A4_ROTATED}
DMPAPER_A5_ROTATED = 78; // A5 Rotated 210 x 148 mm
{$EXTERNALSYM DMPAPER_A5_ROTATED}
DMPAPER_B4_JIS_ROTATED = 79; // B4 (JIS) Rotated 364 x 257 mm
{$EXTERNALSYM DMPAPER_B4_JIS_ROTATED}
DMPAPER_B5_JIS_ROTATED = 80; // B5 (JIS) Rotated 257 x 182 mm
{$EXTERNALSYM DMPAPER_B5_JIS_ROTATED}
DMPAPER_JAPANESE_POSTCARD_ROTATED = 81; // Japanese Postcard Rotated 148 x 100 mm
{$EXTERNALSYM DMPAPER_JAPANESE_POSTCARD_ROTATED}
DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED = 82; // Double Japanese Postcard Rotated 148 x 200 mm
{$EXTERNALSYM DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED}
DMPAPER_A6_ROTATED = 83; // A6 Rotated 148 x 105 mm
{$EXTERNALSYM DMPAPER_A6_ROTATED}
DMPAPER_JENV_KAKU2_ROTATED = 84; // Japanese Envelope Kaku #2 Rotated
{$EXTERNALSYM DMPAPER_JENV_KAKU2_ROTATED}
DMPAPER_JENV_KAKU3_ROTATED = 85; // Japanese Envelope Kaku #3 Rotated


{$EXTERNALSYM DMPAPER_JENV_KAKU3_ROTATED}
DMPAPER_JENV_CHOU3_ROTATED = 86; // Japanese Envelope Chou #3 Rotated
{$EXTERNALSYM DMPAPER_JENV_CHOU3_ROTATED}
DMPAPER_JENV_CHOU4_ROTATED = 87; // Japanese Envelope Chou #4 Rotated
{$EXTERNALSYM DMPAPER_JENV_CHOU4_ROTATED}
DMPAPER_B6_JIS = 88; // B6 (JIS) 128 x 182 mm
{$EXTERNALSYM DMPAPER_B6_JIS}
DMPAPER_B6_JIS_ROTATED = 89; // B6 (JIS) Rotated 182 x 128 mm
{$EXTERNALSYM DMPAPER_B6_JIS_ROTATED}
DMPAPER_12X11 = 90; // 12 x 11 in
{$EXTERNALSYM DMPAPER_12X11}
DMPAPER_JENV_YOU4 = 91; // Japanese Envelope You #4
{$EXTERNALSYM DMPAPER_JENV_YOU4}
DMPAPER_JENV_YOU4_ROTATED = 92; // Japanese Envelope You #4 Rotated
{$EXTERNALSYM DMPAPER_JENV_YOU4_ROTATED}
DMPAPER_P16K = 93; // PRC 16K 146 x 215 mm
{$EXTERNALSYM DMPAPER_P16K}
DMPAPER_P32K = 94; // PRC 32K 97 x 151 mm
{$EXTERNALSYM DMPAPER_P32K}
DMPAPER_P32KBIG = 95; // PRC 32K(Big) 97 x 151 mm
{$EXTERNALSYM DMPAPER_P32KBIG}
DMPAPER_PENV_1 = 96; // PRC Envelope #1 102 x 165 mm
{$EXTERNALSYM DMPAPER_PENV_1}
DMPAPER_PENV_2 = 97; // PRC Envelope #2 102 x 176 mm
{$EXTERNALSYM DMPAPER_PENV_2}
DMPAPER_PENV_3 = 98; // PRC Envelope #3 125 x 176 mm
{$EXTERNALSYM DMPAPER_PENV_3}
DMPAPER_PENV_4 = 99; // PRC Envelope #4 110 x 208 mm
{$EXTERNALSYM DMPAPER_PENV_4}
DMPAPER_PENV_5 = 100; // PRC Envelope #5 110 x 220 mm
{$EXTERNALSYM DMPAPER_PENV_5}
DMPAPER_PENV_6 = 101; // PRC Envelope #6 120 x 230 mm
{$EXTERNALSYM DMPAPER_PENV_6}
DMPAPER_PENV_7 = 102; // PRC Envelope #7 160 x 230 mm
{$EXTERNALSYM DMPAPER_PENV_7}
DMPAPER_PENV_8 = 103; // PRC Envelope #8 120 x 309 mm

{$EXTERNALSYM DMPAPER_PENV_8}
DMPAPER_PENV_9 = 104; // PRC Envelope #9 229 x 324 mm
{$EXTERNALSYM DMPAPER_PENV_9}
DMPAPER_PENV_10 = 105; // PRC Envelope #10 324 x 458 mm
{$EXTERNALSYM DMPAPER_PENV_10}
DMPAPER_P16K_ROTATED = 106; // PRC 16K Rotated
{$EXTERNALSYM DMPAPER_P16K_ROTATED}
DMPAPER_P32K_ROTATED = 107; // PRC 32K Rotated
{$EXTERNALSYM DMPAPER_P32K_ROTATED}
DMPAPER_P32KBIG_ROTATED = 108; // PRC 32K(Big) Rotated
{$EXTERNALSYM DMPAPER_P32KBIG_ROTATED}
DMPAPER_PENV_1_ROTATED = 109; // PRC Envelope #1 Rotated 165 x 102 mm
{$EXTERNALSYM DMPAPER_PENV_1_ROTATED}
DMPAPER_PENV_2_ROTATED = 110; // PRC Envelope #2 Rotated 176 x 102 mm
{$EXTERNALSYM DMPAPER_PENV_2_ROTATED}
DMPAPER_PENV_3_ROTATED = 111; // PRC Envelope #3 Rotated 176 x 125 mm
{$EXTERNALSYM DMPAPER_PENV_3_ROTATED}
DMPAPER_PENV_4_ROTATED = 112; // PRC Envelope #4 Rotated 208 x 110 mm


{$EXTERNALSYM DMPAPER_PENV_4_ROTATED}
DMPAPER_PENV_5_ROTATED = 113; // PRC Envelope #5 Rotated 220 x 110 mm
{$EXTERNALSYM DMPAPER_PENV_5_ROTATED}
DMPAPER_PENV_6_ROTATED = 114; // PRC Envelope #6 Rotated 230 x 120 mm
{$EXTERNALSYM DMPAPER_PENV_6_ROTATED}
DMPAPER_PENV_7_ROTATED = 115; // PRC Envelope #7 Rotated 230 x 160 mm
{$EXTERNALSYM DMPAPER_PENV_7_ROTATED}
DMPAPER_PENV_8_ROTATED = 116; // PRC Envelope #8 Rotated 309 x 120 mm
{$EXTERNALSYM DMPAPER_PENV_8_ROTATED}
DMPAPER_PENV_9_ROTATED = 117; // PRC Envelope #9 Rotated 324 x 229 mm
{$EXTERNALSYM DMPAPER_PENV_9_ROTATED}
DMPAPER_PENV_10_ROTATED = 118; // PRC Envelope #10 Rotated 458 x 324 mm
{$EXTERNALSYM DMPAPER_PENV_10_ROTATED}

{$IFDEF WINVER_0500_GREATER}
DMPAPER_LAST = DMPAPER_PENV_10_ROTATED;
{$EXTERNALSYM DMPAPER_LAST}
{$ELSE}
{$IFDEF WINVER_0400_GREATER}
DMPAPER_LAST = DMPAPER_A3_EXTRA_TRANSVERSE;

{$EXTERNALSYM DMPAPER_LAST}
{$ELSE}
DMPAPER_LAST = DMPAPER_FANFOLD_LGL_GERMAN;
{$EXTERNALSYM DMPAPER_LAST}
{$ENDIF}
{$ENDIF}

DMPAPER_USER = 256;
{$EXTERNALSYM DMPAPER_USER}

// bin selections

DMBIN_UPPER = 1;
{$EXTERNALSYM DMBIN_UPPER}
DMBIN_FIRST = DMBIN_UPPER;
{$EXTERNALSYM DMBIN_FIRST}
DMBIN_ONLYONE = 1;
{$EXTERNALSYM DMBIN_ONLYONE}
DMBIN_LOWER = 2;
{$EXTERNALSYM DMBIN_LOWER}
DMBIN_MIDDLE = 3;
{$EXTERNALSYM DMBIN_MIDDLE}
DMBIN_MANUAL = 4;
{$EXTERNALSYM DMBIN_MANUAL}
DMBIN_ENVELOPE = 5;
{$EXTERNALSYM DMBIN_ENVELOPE}
DMBIN_ENVMANUAL = 6;
{$EXTERNALSYM DMBIN_ENVMANUAL}
DMBIN_AUTO = 7;
{$EXTERNALSYM DMBIN_AUTO}
DMBIN_TRACTOR = 8;
{$EXTERNALSYM DMBIN_TRACTOR}
DMBIN_SMALLFMT = 9;
{$EXTERNALSYM DMBIN_SMALLFMT}
DMBIN_LARGEFMT = 10;
{$EXTERNALSYM DMBIN_LARGEFMT}
DMBIN_LARGECAPACITY = 11;
{$EXTERNALSYM DMBIN_LARGECAPACITY}
DMBIN_CASSETTE = 14;
{$EXTERNALSYM DMBIN_CASSETTE}
DMBIN_FORMSOURCE = 15;
{$EXTERNALSYM DMBIN_FORMSOURCE}
DMBIN_LAST = DMBIN_FORMSOURCE;
{$EXTERNALSYM DMBIN_LAST}

DMBIN_USER = 256; // device specific bins start here
{$EXTERNALSYM DMBIN_USER}

// print qualities

DMRES_DRAFT = DWORD(-1);
{$EXTERNALSYM DMRES_DRAFT}
DMRES_LOW = DWORD(-2);
{$EXTERNALSYM DMRES_LOW}
DMRES_MEDIUM = DWORD(-3);
{$EXTERNALSYM DMRES_MEDIUM}
DMRES_HIGH = DWORD(-4);
{$EXTERNALSYM DMRES_HIGH}

// color enable/disable for color printers

DMCOLOR_MONOCHROME = 1;
{$EXTERNALSYM DMCOLOR_MONOCHROME}
DMCOLOR_COLOR = 2;
{$EXTERNALSYM DMCOLOR_COLOR}

// duplex enable

DMDUP_SIMPLEX = 1;
{$EXTERNALSYM DMDUP_SIMPLEX}
DMDUP_VERTICAL = 2;
{$EXTERNALSYM DMDUP_VERTICAL}
DMDUP_HORIZONTAL = 3;
{$EXTERNALSYM DMDUP_HORIZONTAL}


// TrueType options

DMTT_BITMAP = 1; // print TT fonts as graphics
{$EXTERNALSYM DMTT_BITMAP}
DMTT_DOWNLOAD = 2; // download TT fonts as soft fonts
{$EXTERNALSYM DMTT_DOWNLOAD}
DMTT_SUBDEV = 3; // substitute device fonts for TT fonts
{$EXTERNALSYM DMTT_SUBDEV}
DMTT_DOWNLOAD_OUTLINE = 4; // download TT fonts as outline soft fonts
{$EXTERNALSYM DMTT_DOWNLOAD_OUTLINE}

// Collation selections

DMCOLLATE_FALSE = 0;
{$EXTERNALSYM DMCOLLATE_FALSE}
DMCOLLATE_TRUE = 1;
{$EXTERNALSYM DMCOLLATE_TRUE}

//#if(WINVER >= 0x0501)

// DEVMODE dmDisplayOrientation specifiations

DMDO_DEFAULT = 0;
{$EXTERNALSYM DMDO_DEFAULT}
DMDO_90 = 1;
{$EXTERNALSYM DMDO_90}
DMDO_180 = 2;
{$EXTERNALSYM DMDO_180}
DMDO_270 = 3;
{$EXTERNALSYM DMDO_270}

// DEVMODE dmDisplayFixedOutput specifiations

DMDFO_DEFAULT = 0;
{$EXTERNALSYM DMDFO_DEFAULT}
DMDFO_STRETCH = 1;

{$EXTERNALSYM DMDFO_STRETCH}
DMDFO_CENTER = 2;
{$EXTERNALSYM DMDFO_CENTER}

//#endif /* WINVER >= 0x0501 */

// DEVMODE dmDisplayFlags flags

// #define DM_GRAYSCALE 0x00000001 /* This flag is no longer valid */
// #define DM_INTERLACED 0x00000002 /* This flag is no longer valid */

DMDISPLAYFLAGS_TEXTMODE = $00000004;
{$EXTERNALSYM DMDISPLAYFLAGS_TEXTMODE}

// dmNup , multiple logical page per physical page options

DMNUP_SYSTEM = 1;
{$EXTERNALSYM DMNUP_SYSTEM}
DMNUP_ONEUP = 2;
{$EXTERNALSYM DMNUP_ONEUP}

// ICM methods

DMICMMETHOD_NONE = 1; // ICM disabled
{$EXTERNALSYM DMICMMETHOD_NONE}
DMICMMETHOD_SYSTEM = 2; // ICM handled by system
{$EXTERNALSYM DMICMMETHOD_SYSTEM}
DMICMMETHOD_DRIVER = 3; // ICM handled by driver
{$EXTERNALSYM DMICMMETHOD_DRIVER}
DMICMMETHOD_DEVICE = 4; // ICM handled by device
{$EXTERNALSYM DMICMMETHOD_DEVICE}

DMICMMETHOD_USER = 256; // Device-specific methods start here


{$EXTERNALSYM DMICMMETHOD_USER}

// ICM Intents

DMICM_SATURATE = 1; // Maximize color saturation
{$EXTERNALSYM DMICM_SATURATE}
DMICM_CONTRAST = 2; // Maximize color contrast
{$EXTERNALSYM DMICM_CONTRAST}
DMICM_COLORIMETRIC = 3; // Use specific color metric
{$EXTERNALSYM DMICM_COLORIMETRIC}
DMICM_ABS_COLORIMETRIC = 4; // Use specific color metric
{$EXTERNALSYM DMICM_ABS_COLORIMETRIC}

DMICM_USER = 256; // Device-specific intents start here
{$EXTERNALSYM DMICM_USER}

// Media types

DMMEDIA_STANDARD = 1; // Standard paper
{$EXTERNALSYM DMMEDIA_STANDARD}
DMMEDIA_TRANSPARENCY = 2; // Transparency
{$EXTERNALSYM DMMEDIA_TRANSPARENCY}
DMMEDIA_GLOSSY = 3; // Glossy paper
{$EXTERNALSYM DMMEDIA_GLOSSY}

DMMEDIA_USER = 256; // Device-specific media start here
{$EXTERNALSYM DMMEDIA_USER}

// Dither types

DMDITHER_NONE = 1; // No dithering
{$EXTERNALSYM DMDITHER_NONE}


DMDITHER_COARSE = 2; // Dither with a coarse brush
{$EXTERNALSYM DMDITHER_COARSE}
DMDITHER_FINE = 3; // Dither with a fine brush
{$EXTERNALSYM DMDITHER_FINE}
DMDITHER_LINEART = 4; // LineArt dithering
{$EXTERNALSYM DMDITHER_LINEART}
DMDITHER_ERRORDIFFUSION = 5; // LineArt dithering
{$EXTERNALSYM DMDITHER_ERRORDIFFUSION}
DMDITHER_RESERVED6 = 6; // LineArt dithering
{$EXTERNALSYM DMDITHER_RESERVED6}
DMDITHER_RESERVED7 = 7; // LineArt dithering
{$EXTERNALSYM DMDITHER_RESERVED7}
DMDITHER_RESERVED8 = 8; // LineArt dithering
{$EXTERNALSYM DMDITHER_RESERVED8}
DMDITHER_RESERVED9 = 9; // LineArt dithering
{$EXTERNALSYM DMDITHER_RESERVED9}
DMDITHER_GRAYSCALE = 10; // Device does grayscaling
{$EXTERNALSYM DMDITHER_GRAYSCALE}

DMDITHER_USER = 256; // Device-specific dithers start here
{$EXTERNALSYM DMDITHER_USER}

type
PDisplayDeviceA = ^TDisplayDeviceA;
_DISPLAY_DEVICEA = record


cb: DWORD;
DeviceName: array [0..32 - 1] of CHAR;
DeviceString: array [0..128 - 1] of CHAR;
StateFlags: DWORD;
DeviceID: array [0..128 - 1] of CHAR;
DeviceKey: array [0..128 - 1] of CHAR;
end;
{$EXTERNALSYM _DISPLAY_DEVICEA}
DISPLAY_DEVICEA = _DISPLAY_DEVICEA;
{$EXTERNALSYM DISPLAY_DEVICEA}
LPDISPLAY_DEVICEA = ^DISPLAY_DEVICEA;
{$EXTERNALSYM LPDISPLAY_DEVICEA}
PDISPLAY_DEVICEA = ^DISPLAY_DEVICEA;
{$EXTERNALSYM PDISPLAY_DEVICEA}
TDisplayDeviceA = _DISPLAY_DEVICEA;

PDisplayDeviceW = ^TDisplayDeviceW;
_DISPLAY_DEVICEW = record
cb: DWORD;
DeviceName: array [0..32 - 1] of WCHAR;
DeviceString: array [0..128 - 1] of WCHAR;
StateFlags: DWORD;
DeviceID: array [0..128 - 1] of WCHAR;
DeviceKey: array [0..128 - 1] of WCHAR;
end;
{$EXTERNALSYM _DISPLAY_DEVICEW}
DISPLAY_DEVICEW = _DISPLAY_DEVICEW;
{$EXTERNALSYM DISPLAY_DEVICEW}
LPDISPLAY_DEVICEW = ^DISPLAY_DEVICEW;
{$EXTERNALSYM LPDISPLAY_DEVICEW}
PDISPLAY_DEVICEW = ^DISPLAY_DEVICEW;
{$EXTERNALSYM PDISPLAY_DEVICEW}
TDisplayDeviceW = _DISPLAY_DEVICEW;

{$IFDEF UNICODE}
DISPLAY_DEVICE = DISPLAY_DEVICEW;
{$EXTERNALSYM DISPLAY_DEVICE}
PDISPLAY_DEVICE = PDISPLAY_DEVICEW;
{$EXTERNALSYM PDISPLAY_DEVICE}
LPDISPLAY_DEVICE = LPDISPLAY_DEVICEW;
{$EXTERNALSYM LPDISPLAY_DEVICE}
TDisplayDevice = TDisplayDeviceW;
PDisplayDevice = PDisplayDeviceW;
{$ELSE}
DISPLAY_DEVICE = DISPLAY_DEVICEA;
{$EXTERNALSYM DISPLAY_DEVICE}
PDISPLAY_DEVICE = PDISPLAY_DEVICEA;
{$EXTERNALSYM PDISPLAY_DEVICE}
LPDISPLAY_DEVICE = LPDISPLAY_DEVICEA;
{$EXTERNALSYM LPDISPLAY_DEVICE}
TDisplayDevice = TDisplayDeviceA;
PDisplayDevice = PDisplayDeviceA;
{$ENDIF}

const
DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = $00000001;
{$EXTERNALSYM DISPLAY_DEVICE_ATTACHED_TO_DESKTOP}
DISPLAY_DEVICE_MULTI_DRIVER = $00000002;
{$EXTERNALSYM DISPLAY_DEVICE_MULTI_DRIVER}
DISPLAY_DEVICE_PRIMARY_DEVICE = $00000004;
{$EXTERNALSYM DISPLAY_DEVICE_PRIMARY_DEVICE}
DISPLAY_DEVICE_MIRRORING_DRIVER = $00000008;
{$EXTERNALSYM DISPLAY_DEVICE_MIRRORING_DRIVER}
DISPLAY_DEVICE_VGA_COMPATIBLE = $00000010;
{$EXTERNALSYM DISPLAY_DEVICE_VGA_COMPATIBLE}
DISPLAY_DEVICE_REMOVABLE = $00000020;
{$EXTERNALSYM DISPLAY_DEVICE_REMOVABLE}
DISPLAY_DEVICE_MODESPRUNED = $08000000;
{$EXTERNALSYM DISPLAY_DEVICE_MODESPRUNED}
DISPLAY_DEVICE_REMOTE = $04000000;
{$EXTERNALSYM DISPLAY_DEVICE_REMOTE}
DISPLAY_DEVICE_DISCONNECT = $02000000;
{$EXTERNALSYM DISPLAY_DEVICE_DISCONNECT}

// Child device state

DISPLAY_DEVICE_ACTIVE = $00000001;
{$EXTERNALSYM DISPLAY_DEVICE_ACTIVE}
DISPLAY_DEVICE_ATTACHED = $00000002;
{$EXTERNALSYM DISPLAY_DEVICE_ATTACHED}

// GetRegionData/ExtCreateRegion

RDH_RECTANGLES = 1;
{$EXTERNALSYM RDH_RECTANGLES}



type
PRgnDataHeader = ^TRgnDataHeader;
_RGNDATAHEADER = record
dwSize: DWORD;
iType: DWORD;
nCount: DWORD;
nRgnSize: DWORD;
rcBound: RECT;
end;
{$EXTERNALSYM _RGNDATAHEADER}
RGNDATAHEADER = _RGNDATAHEADER;
{$EXTERNALSYM RGNDATAHEADER}
TRgnDataHeader = _RGNDATAHEADER;

PRgnData = ^TRgnData;
_RGNDATA = record
rdh: RGNDATAHEADER;
Buffer: array [0..0] of Char;
end;
{$EXTERNALSYM _RGNDATA}
RGNDATA = _RGNDATA;
{$EXTERNALSYM RGNDATA}
LPRGNDATA = ^RGNDATA;
{$EXTERNALSYM LPRGNDATA}
NPRGNDATA = ^RGNDATA;
{$EXTERNALSYM NPRGNDATA}
TRgnData = _RGNDATA;

// for GetRandomRgn

const
SYSRGN = 4;
{$EXTERNALSYM SYSRGN}

type
PAbc = ^TAbc;
_ABC = record
abcA: Integer;
abcB: UINT;
abcC: Integer;
end;
{$EXTERNALSYM _ABC}
ABC = _ABC;
{$EXTERNALSYM ABC}
LPABC = ^ABC;
{$EXTERNALSYM LPABC}
NPABC = ^ABC;
{$EXTERNALSYM NPABC}
TAbc = _ABC;

PAbcFloat = ^TAbcFloat;
_ABCFLOAT = record
abcfA: FLOAT;
abcfB: FLOAT;
abcfC: FLOAT;
end;
{$EXTERNALSYM _ABCFLOAT}
ABCFLOAT = _ABCFLOAT;
{$EXTERNALSYM ABCFLOAT}
LPABCFLOAT = ^ABCFLOAT;
{$EXTERNALSYM LPABCFLOAT}
NPABCFLOAT = ^ABCFLOAT;
{$EXTERNALSYM NPABCFLOAT}
TAbcFloat = _ABCFLOAT;

POutlineTextMetricA = ^TOutlineTextMetricA;
_OUTLINETEXTMETRICA = record
otmSize: UINT;
otmTextMetrics: TEXTMETRICA;
otmFiller: BYTE;
otmPanoseNumber: PANOSE;
otmfsSelection: UINT;
otmfsType: UINT;
otmsCharSlopeRise: Integer;
otmsCharSlopeRun: Integer;
otmItalicAngle: Integer;
otmEMSquare: UINT;
otmAscent: Integer;
otmDescent: Integer;
otmLineGap: UINT;
otmsCapEmHeight: UINT;
otmsXHeight: UINT;
otmrcFontBox: RECT;
otmMacAscent: Integer;
otmMacDescent: Integer;
otmMacLineGap: UINT;


otmusMinimumPPEM: UINT;
otmptSubscriptSize: POINT;
otmptSubscriptOffset: POINT;
otmptSuperscriptSize: POINT;
otmptSuperscriptOffset: POINT;
otmsStrikeoutSize: UINT;
otmsStrikeoutPosition: Integer;
otmsUnderscoreSize: Integer;
otmsUnderscorePosition: Integer;
otmpFamilyName: PSTR;
otmpFaceName: PSTR;
otmpStyleName: PSTR;
otmpFullName: PSTR;
end;
{$EXTERNALSYM _OUTLINETEXTMETRICA}
OUTLINETEXTMETRICA = _OUTLINETEXTMETRICA;
{$EXTERNALSYM OUTLINETEXTMETRICA}
LPOUTLINETEXTMETRICA = ^OUTLINETEXTMETRICA;
{$EXTERNALSYM LPOUTLINETEXTMETRICA}
NPOUTLINETEXTMETRICA = ^OUTLINETEXTMETRICA;
{$EXTERNALSYM NPOUTLINETEXTMETRICA}
TOutlineTextMetricA = _OUTLINETEXTMETRICA;

POutlineTextMetricW = ^TOutlineTextMetricW;
_OUTLINETEXTMETRICW = record
otmSize: UINT;
otmTextMetrics: TEXTMETRICW;
otmFiller: BYTE;
otmPanoseNumber: PANOSE;
otmfsSelection: UINT;


otmfsType: UINT;
otmsCharSlopeRise: Integer;
otmsCharSlopeRun: Integer;
otmItalicAngle: Integer;
otmEMSquare: UINT;
otmAscent: Integer;
otmDescent: Integer;
otmLineGap: UINT;
otmsCapEmHeight: UINT;
otmsXHeight: UINT;
otmrcFontBox: RECT;
otmMacAscent: Integer;
otmMacDescent: Integer;
otmMacLineGap: UINT;
otmusMinimumPPEM: UINT;
otmptSubscriptSize: POINT;
otmptSubscriptOffset: POINT;
otmptSuperscriptSize: POINT;
otmptSuperscriptOffset: POINT;
otmsStrikeoutSize: UINT;
otmsStrikeoutPosition: Integer;
otmsUnderscoreSize: Integer;
otmsUnderscorePosition: Integer;
otmpFamilyName: PSTR;
otmpFaceName: PSTR;
otmpStyleName: PSTR;
otmpFullName: PSTR;
end;
{$EXTERNALSYM _OUTLINETEXTMETRICW}
OUTLINETEXTMETRICW = _OUTLINETEXTMETRICW;
{$EXTERNALSYM OUTLINETEXTMETRICW}
LPOUTLINETEXTMETRICW = ^OUTLINETEXTMETRICW;
{$EXTERNALSYM LPOUTLINETEXTMETRICW}
NPOUTLINETEXTMETRICW = ^OUTLINETEXTMETRICW;
{$EXTERNALSYM NPOUTLINETEXTMETRICW}
TOutlineTextMetricW = _OUTLINETEXTMETRICW;

{$IFDEF UNICODE}
OUTLINETEXTMETRIC = OUTLINETEXTMETRICW;
{$EXTERNALSYM OUTLINETEXTMETRIC}
POUTLINETEXTMETRIC = POUTLINETEXTMETRICW;
{$EXTERNALSYM POUTLINETEXTMETRIC}
NPOUTLINETEXTMETRIC = NPOUTLINETEXTMETRICW;
{$EXTERNALSYM NPOUTLINETEXTMETRIC}
LPOUTLINETEXTMETRIC = LPOUTLINETEXTMETRICW;
{$EXTERNALSYM LPOUTLINETEXTMETRIC}
TOutlineTextMetric = TOutlineTextMetricW;
{$ELSE}
OUTLINETEXTMETRIC = OUTLINETEXTMETRICA;
{$EXTERNALSYM OUTLINETEXTMETRIC}
POUTLINETEXTMETRIC = POUTLINETEXTMETRICA;
{$EXTERNALSYM POUTLINETEXTMETRIC}
NPOUTLINETEXTMETRIC = NPOUTLINETEXTMETRICA;
{$EXTERNALSYM NPOUTLINETEXTMETRIC}
LPOUTLINETEXTMETRIC = LPOUTLINETEXTMETRICA;
{$EXTERNALSYM LPOUTLINETEXTMETRIC}
TOutlineTextMetric = TOutlineTextMetricA;
{$ENDIF}

PPolytextA = ^TPolytextA;
tagPOLYTEXTA = record


x: Integer;
y: Integer;
n: UINT;
lpstr: LPCSTR;
uiFlags: UINT;
rcl: RECT;
pdx: PINT;
end;
{$EXTERNALSYM tagPOLYTEXTA}
POLYTEXTA = tagPOLYTEXTA;
{$EXTERNALSYM POLYTEXTA}
LPPOLYTEXTA = ^POLYTEXTA;
{$EXTERNALSYM LPPOLYTEXTA}
NPPOLYTEXTA = ^POLYTEXTA;
{$EXTERNALSYM NPPOLYTEXTA}
TPolytextA = POLYTEXTA;

PPolytextW = ^TPolytextW;
tagPOLYTEXTW = record
x: Integer;
y: Integer;
n: UINT;
lpstr: LPCWSTR;
uiFlags: UINT;
rcl: RECT;
pdx: PINT;
end;
{$EXTERNALSYM tagPOLYTEXTW}
POLYTEXTW = tagPOLYTEXTW;
{$EXTERNALSYM POLYTEXTW}
LPPOLYTEXTW = ^POLYTEXTW;
{$EXTERNALSYM LPPOLYTEXTW}
NPPOLYTEXTW = ^POLYTEXTW;
{$EXTERNALSYM NPPOLYTEXTW}
TPolytextW = POLYTEXTW;

{$IFDEF UNICODE}
POLYTEXT = POLYTEXTW;
{$EXTERNALSYM POLYTEXT}
PPOLYTEXT = PPOLYTEXTW;
{$EXTERNALSYM PPOLYTEXT}
NPPOLYTEXT = NPPOLYTEXTW;
{$EXTERNALSYM NPPOLYTEXT}
LPPOLYTEXT = LPPOLYTEXTW;
{$EXTERNALSYM LPPOLYTEXT}
TPolyText = TPolyTextW;
{$ELSE}
POLYTEXT = POLYTEXTA;
{$EXTERNALSYM POLYTEXT}
PPOLYTEXT = PPOLYTEXTA;
{$EXTERNALSYM PPOLYTEXT}
NPPOLYTEXT = NPPOLYTEXTA;
{$EXTERNALSYM NPPOLYTEXT}
LPPOLYTEXT = LPPOLYTEXTA;
{$EXTERNALSYM LPPOLYTEXT}
TPolyText = TPolyTextA;
{$ENDIF}

PFixed = ^TFixed;
_FIXED = record
fract: WORD;
value: short;
end;
{$EXTERNALSYM _FIXED}
FIXED = _FIXED;
{$EXTERNALSYM FIXED}
TFixed = _FIXED;

PMat2 = ^TMat2;
_MAT2 = record
eM11: FIXED;
eM12: FIXED;
eM21: FIXED;
eM22: FIXED;
end;
{$EXTERNALSYM _MAT2}
MAT2 = _MAT2;
{$EXTERNALSYM MAT2}
LPMAT2 = ^MAT2;
{$EXTERNALSYM LPMAT2}
TMat2 = _MAT2;

PGlyphMetrics = ^TGlyphMetrics;
_GLYPHMETRICS = record
gmBlackBoxX: UINT;
gmBlackBoxY: UINT;
gmptGlyphOrigin: POINT;
gmCellIncX: short;
gmCellIncY: short;
end;
{$EXTERNALSYM _GLYPHMETRICS}
GLYPHMETRICS = _GLYPHMETRICS;
{$EXTERNALSYM GLYPHMETRICS}
LPGLYPHMETRICS = ^GLYPHMETRICS;
{$EXTERNALSYM LPGLYPHMETRICS}
TGlyphMetrics = _GLYPHMETRICS;

// GetGlyphOutline constants

const
GGO_METRICS = 0;
{$EXTERNALSYM GGO_METRICS}
GGO_BITMAP = 1;
{$EXTERNALSYM GGO_BITMAP}
GGO_NATIVE = 2;
{$EXTERNALSYM GGO_NATIVE}
GGO_BEZIER = 3;
{$EXTERNALSYM GGO_BEZIER}

GGO_GRAY2_BITMAP = 4;
{$EXTERNALSYM GGO_GRAY2_BITMAP}
GGO_GRAY4_BITMAP = 5;
{$EXTERNALSYM GGO_GRAY4_BITMAP}
GGO_GRAY8_BITMAP = 6;
{$EXTERNALSYM GGO_GRAY8_BITMAP}
GGO_GLYPH_INDEX = $0080;
{$EXTERNALSYM GGO_GLYPH_INDEX}

GGO_UNHINTED = $0100;
{$EXTERNALSYM GGO_UNHINTED}

TT_POLYGON_TYPE = 24;
{$EXTERNALSYM TT_POLYGON_TYPE}

TT_PRIM_LINE = 1;
{$EXTERNALSYM TT_PRIM_LINE}
TT_PRIM_QSPLINE = 2;
{$EXTERNALSYM TT_PRIM_QSPLINE}

TT_PRIM_CSPLINE = 3;
{$EXTERNALSYM TT_PRIM_CSPLINE}

type
PPointFx = ^TPointFx;
tagPOINTFX = record
x: FIXED;
y: FIXED;
end;
{$EXTERNALSYM tagPOINTFX}
POINTFX = tagPOINTFX;
{$EXTERNALSYM POINTFX}
LPPOINTFX = ^POINTFX;
{$EXTERNALSYM LPPOINTFX}
TPointFx = POINTFX;

PTtPolyCurve = ^TTtPolyCurve;
tagTTPOLYCURVE = record
wType: WORD;
cpfx: WORD;
apfx: array [0..0] of POINTFX;
end;
{$EXTERNALSYM tagTTPOLYCURVE}
TTPOLYCURVE = tagTTPOLYCURVE;
{$EXTERNALSYM TTPOLYCURVE}
LPTTPOLYCURVE = ^TTPOLYCURVE;
{$EXTERNALSYM LPTTPOLYCURVE}
TTtPolyCurve = TTPOLYCURVE;

PTtPolygonHeader = ^TTtPolygonHeader;
tagTTPOLYGONHEADER = record
cb: DWORD;
dwType: DWORD;
pfxStart: POINTFX;
end;
{$EXTERNALSYM tagTTPOLYGONHEADER}
TTPOLYGONHEADER = tagTTPOLYGONHEADER;
{$EXTERNALSYM TTPOLYGONHEADER}
LPTTPOLYGONHEADER = ^TTPOLYGONHEADER;
{$EXTERNALSYM LPTTPOLYGONHEADER}


TTtPolygonHeader = TTPOLYGONHEADER;

const
GCP_DBCS = $0001;
{$EXTERNALSYM GCP_DBCS}
GCP_REORDER = $0002;
{$EXTERNALSYM GCP_REORDER}
GCP_USEKERNING = $0008;
{$EXTERNALSYM GCP_USEKERNING}
GCP_GLYPHSHAPE = $0010;
{$EXTERNALSYM GCP_GLYPHSHAPE}
GCP_LIGATE = $0020;
{$EXTERNALSYM GCP_LIGATE}
////#define GCP_GLYPHINDEXING 0x0080
GCP_DIACRITIC = $0100;
{$EXTERNALSYM GCP_DIACRITIC}
GCP_KASHIDA = $0400;
{$EXTERNALSYM GCP_KASHIDA}
GCP_ERROR = $8000;
{$EXTERNALSYM GCP_ERROR}
FLI_MASK = $103B;
{$EXTERNALSYM FLI_MASK}

GCP_JUSTIFY = $00010000;
{$EXTERNALSYM GCP_JUSTIFY}
////#define GCP_NODIACRITICS 0x00020000L
FLI_GLYPHS = $00040000;
{$EXTERNALSYM FLI_GLYPHS}
GCP_CLASSIN = $00080000;
{$EXTERNALSYM GCP_CLASSIN}
GCP_MAXEXTENT = $00100000;
{$EXTERNALSYM GCP_MAXEXTENT}
GCP_JUSTIFYIN = $00200000;
{$EXTERNALSYM GCP_JUSTIFYIN}


GCP_DISPLAYZWG = $00400000;
{$EXTERNALSYM GCP_DISPLAYZWG}
GCP_SYMSWAPOFF = $00800000;
{$EXTERNALSYM GCP_SYMSWAPOFF}
GCP_NUMERICOVERRIDE = $01000000;
{$EXTERNALSYM GCP_NUMERICOVERRIDE}
GCP_NEUTRALOVERRIDE = $02000000;
{$EXTERNALSYM GCP_NEUTRALOVERRIDE}
GCP_NUMERICSLATIN = $04000000;
{$EXTERNALSYM GCP_NUMERICSLATIN}
GCP_NUMERICSLOCAL = $08000000;
{$EXTERNALSYM GCP_NUMERICSLOCAL}

GCPCLASS_LATIN = 1;
{$EXTERNALSYM GCPCLASS_LATIN}
GCPCLASS_HEBREW = 2;
{$EXTERNALSYM GCPCLASS_HEBREW}
GCPCLASS_ARABIC = 2;
{$EXTERNALSYM GCPCLASS_ARABIC}
GCPCLASS_NEUTRAL = 3;
{$EXTERNALSYM GCPCLASS_NEUTRAL}
GCPCLASS_LOCALNUMBER = 4;
{$EXTERNALSYM GCPCLASS_LOCALNUMBER}
GCPCLASS_LATINNUMBER = 5;
{$EXTERNALSYM GCPCLASS_LATINNUMBER}
GCPCLASS_LATINNUMERICTERMINATOR = 6;
{$EXTERNALSYM GCPCLASS_LATINNUMERICTERMINATOR}

GCPCLASS_LATINNUMERICSEPARATOR = 7;
{$EXTERNALSYM GCPCLASS_LATINNUMERICSEPARATOR}
GCPCLASS_NUMERICSEPARATOR = 8;
{$EXTERNALSYM GCPCLASS_NUMERICSEPARATOR}
GCPCLASS_PREBOUNDLTR = $80;
{$EXTERNALSYM GCPCLASS_PREBOUNDLTR}
GCPCLASS_PREBOUNDRTL = $40;
{$EXTERNALSYM GCPCLASS_PREBOUNDRTL}
GCPCLASS_POSTBOUNDLTR = $20;
{$EXTERNALSYM GCPCLASS_POSTBOUNDLTR}
GCPCLASS_POSTBOUNDRTL = $10;
{$EXTERNALSYM GCPCLASS_POSTBOUNDRTL}

GCPGLYPH_LINKBEFORE = $8000;
{$EXTERNALSYM GCPGLYPH_LINKBEFORE}
GCPGLYPH_LINKAFTER = $4000;
{$EXTERNALSYM GCPGLYPH_LINKAFTER}

type
PGcpResultsA = ^TGcpResultsA;
tagGCP_RESULTSA = record
lStructSize: DWORD;
lpOutString: LPSTR;
lpOrder: LPUINT;
lpDx: PINT;
lpCaretPos: PINT;
lpClass: LPSTR;
lpGlyphs: LPWSTR;
nGlyphs: UINT;
nMaxFit: Integer;
end;
{$EXTERNALSYM tagGCP_RESULTSA}
GCP_RESULTSA = tagGCP_RESULTSA;

{$EXTERNALSYM GCP_RESULTSA}
LPGCP_RESULTSA = ^GCP_RESULTSA;
{$EXTERNALSYM LPGCP_RESULTSA}
TGcpResultsA = GCP_RESULTSA;

PGcpResultsW = ^TGcpResultsW;
tagGCP_RESULTSW = record
lStructSize: DWORD;
lpOutString: LPWSTR;
lpOrder: LPUINT;
lpDx: PINT;
lpCaretPos: PINT;
lpClass: LPSTR;
lpGlyphs: LPWSTR;
nGlyphs: UINT;
nMaxFit: Integer;
end;
{$EXTERNALSYM tagGCP_RESULTSW}
GCP_RESULTSW = tagGCP_RESULTSW;
{$EXTERNALSYM GCP_RESULTSW}
LPGCP_RESULTSW = ^GCP_RESULTSW;
{$EXTERNALSYM LPGCP_RESULTSW}
TGcpResultsW = GCP_RESULTSW;

{$IFDEF UNICODE}
GCP_RESULTS = GCP_RESULTSW;
{$EXTERNALSYM GCP_RESULTS}
LPGCP_RESULTS = LPGCP_RESULTSW;
{$EXTERNALSYM LPGCP_RESULTS}
TGcpResults = TGcpResultsW;
PGcpResults = PGcpResultsW;
{$ELSE}
GCP_RESULTS = GCP_RESULTSA;
{$EXTERNALSYM GCP_RESULTS}
LPGCP_RESULTS = LPGCP_RESULTSA;
{$EXTERNALSYM LPGCP_RESULTS}
TGcpResults = TGcpResultsA;

PGcpResults = PGcpResultsA;
{$ENDIF}

PRasterizerStatus = ^TRasterizerStatus;
_RASTERIZER_STATUS = record
nSize: short;
wFlags: short;
nLanguageID: short;
end;
{$EXTERNALSYM _RASTERIZER_STATUS}
RASTERIZER_STATUS = _RASTERIZER_STATUS;
{$EXTERNALSYM RASTERIZER_STATUS}
LPRASTERIZER_STATUS = ^RASTERIZER_STATUS;
{$EXTERNALSYM LPRASTERIZER_STATUS}
TRasterizerStatus = _RASTERIZER_STATUS;

// bits defined in wFlags of RASTERIZER_STATUS

const
TT_AVAILABLE = $0001;
{$EXTERNALSYM TT_AVAILABLE}
TT_ENABLED = $0002;
{$EXTERNALSYM TT_ENABLED}

// Pixel format descriptor

type
PPixelFormatDescriptor = ^TPixelFormatDescriptor;
tagPIXELFORMATDESCRIPTOR = record
nSize: WORD;
nVersion: WORD;
dwFlags: DWORD;
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: BYTE;
dwLayerMask: DWORD;
dwVisibleMask: DWORD;
dwDamageMask: DWORD;
end;
{$EXTERNALSYM tagPIXELFORMATDESCRIPTOR}
PIXELFORMATDESCRIPTOR = tagPIXELFORMATDESCRIPTOR;
{$EXTERNALSYM PIXELFORMATDESCRIPTOR}
LPPIXELFORMATDESCRIPTOR = ^PIXELFORMATDESCRIPTOR;
{$EXTERNALSYM LPPIXELFORMATDESCRIPTOR}
TPixelFormatDescriptor = PIXELFORMATDESCRIPTOR;

// pixel types

const
PFD_TYPE_RGBA = 0;
{$EXTERNALSYM PFD_TYPE_RGBA}
PFD_TYPE_COLORINDEX = 1;
{$EXTERNALSYM PFD_TYPE_COLORINDEX}

// layer types

PFD_MAIN_PLANE = 0;
{$EXTERNALSYM PFD_MAIN_PLANE}
PFD_OVERLAY_PLANE = 1;
{$EXTERNALSYM PFD_OVERLAY_PLANE}

PFD_UNDERLAY_PLANE = DWORD(-1);
{$EXTERNALSYM PFD_UNDERLAY_PLANE}

// PIXELFORMATDESCRIPTOR flags

PFD_DOUBLEBUFFER = $00000001;
{$EXTERNALSYM PFD_DOUBLEBUFFER}
PFD_STEREO = $00000002;
{$EXTERNALSYM PFD_STEREO}
PFD_DRAW_TO_WINDOW = $00000004;
{$EXTERNALSYM PFD_DRAW_TO_WINDOW}
PFD_DRAW_TO_BITMAP = $00000008;
{$EXTERNALSYM PFD_DRAW_TO_BITMAP}
PFD_SUPPORT_GDI = $00000010;
{$EXTERNALSYM PFD_SUPPORT_GDI}
PFD_SUPPORT_OPENGL = $00000020;
{$EXTERNALSYM PFD_SUPPORT_OPENGL}
PFD_GENERIC_FORMAT = $00000040;
{$EXTERNALSYM PFD_GENERIC_FORMAT}
PFD_NEED_PALETTE = $00000080;
{$EXTERNALSYM PFD_NEED_PALETTE}
PFD_NEED_SYSTEM_PALETTE = $00000100;
{$EXTERNALSYM PFD_NEED_SYSTEM_PALETTE}
PFD_SWAP_EXCHANGE = $00000200;
{$EXTERNALSYM PFD_SWAP_EXCHANGE}
PFD_SWAP_COPY = $00000400;
{$EXTERNALSYM PFD_SWAP_COPY}
PFD_SWAP_LAYER_BUFFERS = $00000800;

{$EXTERNALSYM PFD_SWAP_LAYER_BUFFERS}
PFD_GENERIC_ACCELERATED = $00001000;
{$EXTERNALSYM PFD_GENERIC_ACCELERATED}
PFD_SUPPORT_DIRECTDRAW = $00002000;
{$EXTERNALSYM PFD_SUPPORT_DIRECTDRAW}

// PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only

PFD_DEPTH_DONTCARE = DWORD($20000000);
{$EXTERNALSYM PFD_DEPTH_DONTCARE}
PFD_DOUBLEBUFFER_DONTCARE = DWORD($40000000);
{$EXTERNALSYM PFD_DOUBLEBUFFER_DONTCARE}
PFD_STEREO_DONTCARE = DWORD($80000000);
{$EXTERNALSYM PFD_STEREO_DONTCARE}

type
OLDFONTENUMPROCA = function (lpelf: LPLOGFONTA; lpntm: LPTEXTMETRICA; FontType: DWORD; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM OLDFONTENUMPROCA}
OLDFONTENUMPROCW = function (lpelf: LPLOGFONTW; lpntm: LPTEXTMETRICW; FontType: DWORD; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM OLDFONTENUMPROCW}
{$IFDEF UNICODE}
OLDFONTENUMPROC = function (lpelf: LPLOGFONTW; lpntm: LPTEXTMETRICW; FontType: DWORD; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM OLDFONTENUMPROC}
{$ELSE}
OLDFONTENUMPROC = function (lpelf: LPLOGFONTA; lpntm: LPTEXTMETRICA; FontType: DWORD; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM OLDFONTENUMPROC}
{$ENDIF}

FONTENUMPROCA = OLDFONTENUMPROCA;
{$EXTERNALSYM FONTENUMPROCA}
FONTENUMPROCW = OLDFONTENUMPROCW;
{$EXTERNALSYM FONTENUMPROCW}
{$IFDEF UNICODE}
FONTENUMPROC = FONTENUMPROCW;
{$EXTERNALSYM FONTENUMPROC}
{$ELSE}
FONTENUMPROC = FONTENUMPROCA;
{$EXTERNALSYM FONTENUMPROC}
{$ENDIF}

GOBJENUMPROC = function(lpLogObject: LPVOID; lpData: LPARAM): Integer; stdcall;
{$EXTERNALSYM GOBJENUMPROC}
LINEDDAPROC = procedure (X, Y: Integer; lpData: LPARAM); stdcall;
{$EXTERNALSYM LINEDDAPROC}

function AddFontResourceA(lpszFileName: LPCSTR): Integer; stdcall;
{$EXTERNALSYM AddFontResourceA}
function AddFontResourceW(lpszFileName: LPCWSTR): Integer; stdcall;
{$EXTERNALSYM AddFontResourceW}

{$IFDEF UNICODE}
function AddFontResource(lpszFileName: LPCWSTR): Integer; stdcall;


{$EXTERNALSYM AddFontResource}
{$ELSE}
function AddFontResource(lpszFileName: LPCSTR): Integer; stdcall;
{$EXTERNALSYM AddFontResource}
{$ENDIF}

function AnimatePalette(hPal: HPALETTE; iStartIndex: UINT; cEntries: UINT; ppe: PPALETTEENTRY): BOOL; stdcall;
{$EXTERNALSYM AnimatePalette}
function Arc(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect, nxStartArc, nyStartArc, nXEndArc, nYEndArc: Integer): BOOL; stdcall;
{$EXTERNALSYM Arc}
function BitBlt(hdcDEst: HDC; nXDest, nYDest, nWidth, nHeight: Integer; hdcSrc: HDC; nXSrc, nYSrc: Integer; dwRop: DWORD): BOOL; stdcall;
{$EXTERNALSYM BitBlt}
function CancelDC(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM CancelDC}
function Chord(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2: Integer): BOOL; stdcall;
{$EXTERNALSYM Chord}
function ChoosePixelFormat(hdc: HDC; const ppfd: PIXELFORMATDESCRIPTOR): Integer; stdcall;
{$EXTERNALSYM ChoosePixelFormat}
function CloseMetaFile(hdc: HDC): HMETAFILE; stdcall;
{$EXTERNALSYM CloseMetaFile}
function CombineRgn(hrgnDest, hrgnSrc1, hrgnSrc2: HRGN; fnCombineMode: Integer): Integer; stdcall;
{$EXTERNALSYM CombineRgn}
function CopyMetaFileA(hmfSrc: HMETAFILE; lpszFile: LPCSTR): HMETAFILE; stdcall;
{$EXTERNALSYM CopyMetaFileA}
function CopyMetaFileW(hmfSrc: HMETAFILE; lpszFile: LPCWSTR): HMETAFILE; stdcall;
{$EXTERNALSYM CopyMetaFileW}
{$IFDEF UNICODE}
function CopyMetaFile(hmfSrc: HMETAFILE; lpszFile: LPCWSTR): HMETAFILE; stdcall;
{$EXTERNALSYM CopyMetaFile}
{$ELSE}
function CopyMetaFile(hmfSrc: HMETAFILE; lpszFile: LPCSTR): HMETAFILE; stdcall;
{$EXTERNALSYM CopyMetaFile}
{$ENDIF}
function CreateBitmap(nWidth, nHeight: Integer; Cplanes, cBitsPerPel: UINT; lpvBits: PVOID): HBITMAP; stdcall;
{$EXTERNALSYM CreateBitmap}
function CreateBitmapIndirect(const lpbm: BITMAP): HBITMAP; stdcall;
{$EXTERNALSYM CreateBitmapIndirect}
function CreateBrushIndirect(const lplb: LOGBRUSH): HBRUSH; stdcall;
{$EXTERNALSYM CreateBrushIndirect}


function CreateCompatibleBitmap(hdc: HDC; nWidth, nHeight: Integer): HBITMAP; stdcall;
{$EXTERNALSYM CreateCompatibleBitmap}
function CreateDiscardableBitmap(hdc: HDC; nWidth, nHeight: Integer): HBITMAP; stdcall;
{$EXTERNALSYM CreateDiscardableBitmap}
function CreateCompatibleDC(hdc: HDC): HDC; stdcall;
{$EXTERNALSYM CreateCompatibleDC}
function CreateDCA(lpszDriver, lpszDevice, lpszOutput: LPCSTR; lpInitData: LPDEVMODEA): HDC; stdcall;
{$EXTERNALSYM CreateDCA}
function CreateDCW(lpszDriver, lpszDevice, lpszOutput: LPCWSTR; lpInitData: LPDEVMODEW): HDC; stdcall;
{$EXTERNALSYM CreateDCW}
{$IFDEF UNICODE}
function CreateDC(lpszDriver, lpszDevice, lpszOutput: LPCWSTR; lpInitData: LPDEVMODEW): HDC; stdcall;
{$EXTERNALSYM CreateDC}
{$ELSE}
function CreateDC(lpszDriver, lpszDevice, lpszOutput: LPCSTR; lpInitData: LPDEVMODEA): HDC; stdcall;
{$EXTERNALSYM CreateDC}
{$ENDIF}
function CreateDIBitmap(hdc: HDC; const lpbmih: BITMAPINFOHEADER; fdwInit: DWORD; lpbInit: PVOID; const lpbmi: BITMAPINFO; fuUsage: UINT): HBITMAP; stdcall;


{$EXTERNALSYM CreateDIBitmap}
function CreateDIBPatternBrush(hglbDIBPacked: HGLOBAL; fuColorSpec: UINT): HBRUSH; stdcall;
{$EXTERNALSYM CreateDIBPatternBrush}
function CreateDIBPatternBrushPt(lpPackedDIB: PVOID; iUsage: UINT): HBRUSH; stdcall;
{$EXTERNALSYM CreateDIBPatternBrushPt}
function CreateEllipticRgn(nLeftRect, nTopRect, nRightRect, nBottomRect: Integer): HRGN; stdcall;
{$EXTERNALSYM CreateEllipticRgn}
function CreateEllipticRgnIndirect(const lprc: RECT): HRGN; stdcall;
{$EXTERNALSYM CreateEllipticRgnIndirect}
function CreateFontIndirectA(const lplf: LOGFONTA): HFONT; stdcall;
{$EXTERNALSYM CreateFontIndirectA}
function CreateFontIndirectW(const lplf: LOGFONTW): HFONT; stdcall;
{$EXTERNALSYM CreateFontIndirectW}
{$IFDEF UNICODE}
function CreateFontIndirect(const lplf: LOGFONTW): HFONT; stdcall;
{$EXTERNALSYM CreateFontIndirect}
{$ELSE}
function CreateFontIndirect(const lplf: LOGFONTA): HFONT; stdcall;
{$EXTERNALSYM CreateFontIndirect}
{$ENDIF}


function CreateFontA(nHeight, nWidth, nEscapement, nOrientation, fnWeight: Integer; fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily: DWORD; lpszFace: LPCSTR): HFONT; stdcall;
{$EXTERNALSYM CreateFontA}
function CreateFontW(nHeight, nWidth, nEscapement, nOrientation, fnWeight: Integer; fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily: DWORD; lpszFace: LPCWSTR): HFONT; stdcall;
{$EXTERNALSYM CreateFontW}
{$IFDEF UNICODE}
function CreateFont(nHeight, nWidth, nEscapement, nOrientation, fnWeight: Integer; fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily: DWORD; lpszFace: LPCWSTR): HFONT; stdcall;
{$EXTERNALSYM CreateFont}
{$ELSE}
function CreateFont(nHeight, nWidth, nEscapement, nOrientation, fnWeight: Integer; fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily: DWORD; lpszFace: LPCSTR): HFONT; stdcall;
{$EXTERNALSYM CreateFont}
{$ENDIF}
function CreateHatchBrush(fnStyle: Integer; clrref: COLORREF): HBRUSH; stdcall;
{$EXTERNALSYM CreateHatchBrush}
function CreateICA(lpszDriver, lpszDevice, lpszOutput: LPCSTR; lpdvmInit: LPDEVMODEA): HDC; stdcall;
{$EXTERNALSYM CreateICA}
function CreateICW(lpszDriver, lpszDevice, lpszOutput: LPCWSTR; lpdvmInit: LPDEVMODEW): HDC; stdcall;
{$EXTERNALSYM CreateICW}
{$IFDEF UNICODE}
function CreateIC(lpszDriver, lpszDevice, lpszOutput: LPCWSTR; lpdvmInit: LPDEVMODEW): HDC; stdcall;
{$EXTERNALSYM CreateIC}
{$ELSE}
function CreateIC(lpszDriver, lpszDevice, lpszOutput: LPCSTR; lpdvmInit: LPDEVMODEA): HDC; stdcall;
{$EXTERNALSYM CreateIC}
{$ENDIF}
function CreateMetaFileA(lpszFile: LPCSTR): HDC; stdcall;
{$EXTERNALSYM CreateMetaFileA}
function CreateMetaFileW(lpszFile: LPCWSTR): HDC; stdcall;
{$EXTERNALSYM CreateMetaFileW}
{$IFDEF UNICODE}
function CreateMetaFile(lpszFile: LPCWSTR): HDC; stdcall;
{$EXTERNALSYM CreateMetaFile}
{$ELSE}
function CreateMetaFile(lpszFile: LPCSTR): HDC; stdcall;
{$EXTERNALSYM CreateMetaFile}
{$ENDIF}
function CreatePalette(const lplgpl: LOGPALETTE): HPALETTE; stdcall;
{$EXTERNALSYM CreatePalette}
function CreatePen(fnPenStyle, nWidth: Integer; crColor: COLORREF): HPEN; stdcall;
{$EXTERNALSYM CreatePen}
function CreatePenIndirect(const lplgpn: LOGPEN): HPEN; stdcall;
{$EXTERNALSYM CreatePenIndirect}
function CreatePolyPolygonRgn(lppt: LPPOINT; lpPolyCounts: LPINT; nCount, fnPolyFillMode: Integer): HRGN; stdcall;
{$EXTERNALSYM CreatePolyPolygonRgn}
function CreatePatternBrush(hbmp: HBITMAP): HBRUSH; stdcall;
{$EXTERNALSYM CreatePatternBrush}
function CreateRectRgn(nLeftRect, nTopRect, nRightRect, nBottomRect: Integer): HRGN; stdcall;
{$EXTERNALSYM CreateRectRgn}
function CreateRectRgnIndirect(const lprc: RECT): HRGN; stdcall;
{$EXTERNALSYM CreateRectRgnIndirect}
function CreateRoundRectRgn(nLeftRect, nTopRect, nRightRect, nBottomRect, nWidthEllipse, nHeightEllipse: Integer): HRGN; stdcall;
{$EXTERNALSYM CreateRoundRectRgn}
function CreateScalableFontResourceA(fdwHidden: DWORD; lpszFontRes, lpszFontFile, lpszCurrentPath: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM CreateScalableFontResourceA}
function CreateScalableFontResourceW(fdwHidden: DWORD; lpszFontRes, lpszFontFile, lpszCurrentPath: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM CreateScalableFontResourceW}
{$IFDEF UNICODE}
function CreateScalableFontResource(fdwHidden: DWORD; lpszFontRes, lpszFontFile, lpszCurrentPath: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM CreateScalableFontResource}
{$ELSE}
function CreateScalableFontResource(fdwHidden: DWORD; lpszFontRes, lpszFontFile, lpszCurrentPath: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM CreateScalableFontResource}
{$ENDIF}
function CreateSolidBrush(crColor: COLORREF): HBRUSH; stdcall;
{$EXTERNALSYM CreateSolidBrush}
function DeleteDC(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM DeleteDC}
function DeleteMetaFile(hmf: HMETAFILE): BOOL; stdcall;
{$EXTERNALSYM DeleteMetaFile}
function DeleteObject(hObject: HGDIOBJ): BOOL; stdcall;
{$EXTERNALSYM DeleteObject}
function DescribePixelFormat(hdc: HDC; iPixelFormat: Integer; nBytes: UINT; ppfd: LPPIXELFORMATDESCRIPTOR): Integer; stdcall;
{$EXTERNALSYM DescribePixelFormat}

// mode selections for the device mode function

const
DM_UPDATE = 1;
{$EXTERNALSYM DM_UPDATE}
DM_COPY = 2;
{$EXTERNALSYM DM_COPY}
DM_PROMPT = 4;
{$EXTERNALSYM DM_PROMPT}
DM_MODIFY = 8;
{$EXTERNALSYM DM_MODIFY}

DM_IN_BUFFER = DM_MODIFY;
{$EXTERNALSYM DM_IN_BUFFER}
DM_IN_PROMPT = DM_PROMPT;
{$EXTERNALSYM DM_IN_PROMPT}
DM_OUT_BUFFER = DM_COPY;
{$EXTERNALSYM DM_OUT_BUFFER}
DM_OUT_DEFAULT = DM_UPDATE;
{$EXTERNALSYM DM_OUT_DEFAULT}

// device capabilities indices

DC_FIELDS = 1;
{$EXTERNALSYM DC_FIELDS}
DC_PAPERS = 2;
{$EXTERNALSYM DC_PAPERS}
DC_PAPERSIZE = 3;
{$EXTERNALSYM DC_PAPERSIZE}
DC_MINEXTENT = 4;


{$EXTERNALSYM DC_MINEXTENT}
DC_MAXEXTENT = 5;
{$EXTERNALSYM DC_MAXEXTENT}
DC_BINS = 6;
{$EXTERNALSYM DC_BINS}
DC_DUPLEX = 7;
{$EXTERNALSYM DC_DUPLEX}
DC_SIZE = 8;
{$EXTERNALSYM DC_SIZE}
DC_EXTRA = 9;
{$EXTERNALSYM DC_EXTRA}
DC_VERSION = 10;
{$EXTERNALSYM DC_VERSION}
DC_DRIVER = 11;
{$EXTERNALSYM DC_DRIVER}
DC_BINNAMES = 12;
{$EXTERNALSYM DC_BINNAMES}
DC_ENUMRESOLUTIONS = 13;
{$EXTERNALSYM DC_ENUMRESOLUTIONS}
DC_FILEDEPENDENCIES = 14;
{$EXTERNALSYM DC_FILEDEPENDENCIES}
DC_TRUETYPE = 15;
{$EXTERNALSYM DC_TRUETYPE}
DC_PAPERNAMES = 16;
{$EXTERNALSYM DC_PAPERNAMES}
DC_ORIENTATION = 17;
{$EXTERNALSYM DC_ORIENTATION}
DC_COPIES = 18;
{$EXTERNALSYM DC_COPIES}
DC_BINADJUST = 19;
{$EXTERNALSYM DC_BINADJUST}
DC_EMF_COMPLIANT = 20;
{$EXTERNALSYM DC_EMF_COMPLIANT}


DC_DATATYPE_PRODUCED = 21;
{$EXTERNALSYM DC_DATATYPE_PRODUCED}
DC_COLLATE = 22;
{$EXTERNALSYM DC_COLLATE}
DC_MANUFACTURER = 23;
{$EXTERNALSYM DC_MANUFACTURER}
DC_MODEL = 24;
{$EXTERNALSYM DC_MODEL}

DC_PERSONALITY = 25;
{$EXTERNALSYM DC_PERSONALITY}
DC_PRINTRATE = 26;
{$EXTERNALSYM DC_PRINTRATE}
DC_PRINTRATEUNIT = 27;
{$EXTERNALSYM DC_PRINTRATEUNIT}
PRINTRATEUNIT_PPM = 1;
{$EXTERNALSYM PRINTRATEUNIT_PPM}
PRINTRATEUNIT_CPS = 2;
{$EXTERNALSYM PRINTRATEUNIT_CPS}
PRINTRATEUNIT_LPM = 3;
{$EXTERNALSYM PRINTRATEUNIT_LPM}
PRINTRATEUNIT_IPM = 4;
{$EXTERNALSYM PRINTRATEUNIT_IPM}
DC_PRINTERMEM = 28;
{$EXTERNALSYM DC_PRINTERMEM}
DC_MEDIAREADY = 29;
{$EXTERNALSYM DC_MEDIAREADY}
DC_STAPLE = 30;
{$EXTERNALSYM DC_STAPLE}
DC_PRINTRATEPPM = 31;
{$EXTERNALSYM DC_PRINTRATEPPM}
DC_COLORDEVICE = 32;
{$EXTERNALSYM DC_COLORDEVICE}
DC_NUP = 33;
{$EXTERNALSYM DC_NUP}
DC_MEDIATYPENAMES = 34;
{$EXTERNALSYM DC_MEDIATYPENAMES}
DC_MEDIATYPES = 35;
{$EXTERNALSYM DC_MEDIATYPES}

// bit fields of the return value (DWORD) for DC_TRUETYPE

DCTT_BITMAP = $0000001;
{$EXTERNALSYM DCTT_BITMAP}
DCTT_DOWNLOAD = $0000002;
{$EXTERNALSYM DCTT_DOWNLOAD}
DCTT_SUBDEV = $0000004;
{$EXTERNALSYM DCTT_SUBDEV}
DCTT_DOWNLOAD_OUTLINE = $0000008;
{$EXTERNALSYM DCTT_DOWNLOAD_OUTLINE}

// return values for DC_BINADJUST

DCBA_FACEUPNONE = $0000;
{$EXTERNALSYM DCBA_FACEUPNONE}
DCBA_FACEUPCENTER = $0001;
{$EXTERNALSYM DCBA_FACEUPCENTER}
DCBA_FACEUPLEFT = $0002;
{$EXTERNALSYM DCBA_FACEUPLEFT}
DCBA_FACEUPRIGHT = $0003;
{$EXTERNALSYM DCBA_FACEUPRIGHT}
DCBA_FACEDOWNNONE = $0100;
{$EXTERNALSYM DCBA_FACEDOWNNONE}
DCBA_FACEDOWNCENTER = $0101;
{$EXTERNALSYM DCBA_FACEDOWNCENTER}

DCBA_FACEDOWNLEFT = $0102;
{$EXTERNALSYM DCBA_FACEDOWNLEFT}
DCBA_FACEDOWNRIGHT = $0103;
{$EXTERNALSYM DCBA_FACEDOWNRIGHT}

function DeviceCapabilitiesA(pDevice, pPort: LPCSTR; fwCapability: WORD; pOutput: LPSTR; pDevMode: LPDEVMODEA): Integer; stdcall;
{$EXTERNALSYM DeviceCapabilitiesA}
function DeviceCapabilitiesW(pDevice, pPort: LPCWSTR; fwCapability: WORD; pOutput: LPWSTR; pDevMode: LPDEVMODEW): Integer; stdcall;
{$EXTERNALSYM DeviceCapabilitiesW}
{$IFDEF UNICODE}
function DeviceCapabilities(pDevice, pPort: LPCWSTR; fwCapability: WORD; pOutput: LPWSTR; pDevMode: LPDEVMODEW): Integer; stdcall;
{$EXTERNALSYM DeviceCapabilities}
{$ELSE}
function DeviceCapabilities(pDevice, pPort: LPCSTR; fwCapability: WORD; pOutput: LPSTR; pDevMode: LPDEVMODEA): Integer; stdcall;
{$EXTERNALSYM DeviceCapabilities}
{$ENDIF}
function DrawEscape(hdc: HDC; nEscape, cbInput: Integer; lpszInData: LPCSTR): Integer; stdcall;
{$EXTERNALSYM DrawEscape}
function Ellipse(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect: Integer): BOOL; stdcall;


{$EXTERNALSYM Ellipse}
function EnumFontFamiliesExA(hdc: HDC; lpLogFont: LPLOGFONTA; lpEnumFontFamExProc: FONTENUMPROCA; lParam: LPARAM; dwFlags: DWORD): Integer; stdcall;
{$EXTERNALSYM EnumFontFamiliesExA}
function EnumFontFamiliesExW(hdc: HDC; lpLogFont: LPLOGFONTW; lpEnumFontFamExProc: FONTENUMPROCW; lParam: LPARAM; dwFlags: DWORD): Integer; stdcall;
{$EXTERNALSYM EnumFontFamiliesExW}
{$IFDEF UNICODE}
function EnumFontFamiliesEx(hdc: HDC; lpLogFont: LPLOGFONTW; lpEnumFontFamExProc: FONTENUMPROCW; lParam: LPARAM; dwFlags: DWORD): Integer; stdcall;
{$EXTERNALSYM EnumFontFamiliesEx}
{$ELSE}
function EnumFontFamiliesEx(hdc: HDC; lpLogFont: LPLOGFONTA; lpEnumFontFamExProc: FONTENUMPROCA; lParam: LPARAM; dwFlags: DWORD): Integer; stdcall;
{$EXTERNALSYM EnumFontFamiliesEx}
{$ENDIF}

function EnumFontFamiliesA(hdc: HDC; lpszFamily: LPCSTR; lpEnumFontFamProc: FONTENUMPROCA; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumFontFamiliesA}
function EnumFontFamiliesW(hdc: HDC; lpszFamily: LPCWSTR; lpEnumFontFamProc: FONTENUMPROCW; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumFontFamiliesW}
{$IFDEF UNICODE}
function EnumFontFamilies(hdc: HDC; lpszFamily: LPCWSTR; lpEnumFontFamProc: FONTENUMPROCW; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumFontFamilies}
{$ELSE}
function EnumFontFamilies(hdc: HDC; lpszFamily: LPCSTR; lpEnumFontFamProc: FONTENUMPROCA; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumFontFamilies}
{$ENDIF}

function EnumFontsA(hdc: HDC; lpFaceName: LPCSTR; lpFontFunc: FONTENUMPROCA; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumFontsA}
function EnumFontsW(hdc: HDC; lpFaceName: LPCWSTR; lpFontFunc: FONTENUMPROCW; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumFontsW}
{$IFDEF UNICODE}
function EnumFonts(hdc: HDC; lpFaceName: LPCWSTR; lpFontFunc: FONTENUMPROCW; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumFonts}
{$ELSE}
function EnumFonts(hdc: HDC; lpFaceName: LPCSTR; lpFontFunc: FONTENUMPROCA; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumFonts}
{$ENDIF}

function EnumObjects(hdc: HDC; mObjectType: Integer; lpObjectFunc: GOBJENUMPROC; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumObjects}

function EqualRgn(hSrcRgn1, hSrcRgn2: HRGN): BOOL; stdcall;
{$EXTERNALSYM EqualRgn}
function Escape(hdc: HDC; nEscape, cbInput: Integer; lpvInData: LPCSTR; lpvOutData: LPVOID): Integer; stdcall;
{$EXTERNALSYM Escape}
function ExtEscape(hdc: HDC; nEscape, cbInput: Integer; lpszInData: LPCSTR; cbOutput: Integer; lpszOutData: LPSTR): Integer; stdcall;
{$EXTERNALSYM ExtEscape}
function ExcludeClipRect(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect: Integer): Integer; stdcall;
{$EXTERNALSYM ExcludeClipRect}
function ExtCreateRegion(lpXForm: LPXFORM; nCount: DWORD; lpRgnData: LPRGNDATA): HRGN; stdcall;
{$EXTERNALSYM ExtCreateRegion}
function ExtFloodFill(hdc: HDC; nXStart, nYStart: Integer; crColor: COLORREF; fuFillType: UINT): BOOL; stdcall;
{$EXTERNALSYM ExtFloodFill}
function FillRgn(hdc: HDC; hrgn: HRGN; hbr: HBRUSH): BOOL; stdcall;

{$EXTERNALSYM FillRgn}
function FloodFill(hdc: HDC; nXStart, nYStart: Integer; crFill: COLORREF): BOOL; stdcall;
{$EXTERNALSYM FloodFill}
function FrameRgn(hdc: HDC; hrgn: HRGN; hbr: HBRUSH; nWidth, nHeight: Integer): BOOL; stdcall;
{$EXTERNALSYM FrameRgn}
function GetROP2(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetROP2}
function GetAspectRatioFilterEx(hdc: HDC; var lpAspectRatio: TSize): BOOL; stdcall;
{$EXTERNALSYM GetAspectRatioFilterEx}
function GetBkColor(hdc: HDC): COLORREF; stdcall;
{$EXTERNALSYM GetBkColor}

function GetDCBrushColor(hdc: HDC): COLORREF; stdcall;
{$EXTERNALSYM GetDCBrushColor}
function GetDCPenColor(hdc: HDC): COLORREF; stdcall;
{$EXTERNALSYM GetDCPenColor}

function GetBkMode(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetBkMode}
function GetBitmapBits(hbmp: HBITMAP; cbBuffer: LONG; lpvBits: LPVOID): LONG; stdcall;
{$EXTERNALSYM GetBitmapBits}
function GetBitmapDimensionEx(hBitmap: HBITMAP; var lpDimension: TSize): BOOL; stdcall;
{$EXTERNALSYM GetBitmapDimensionEx}
function GetBoundsRect(hdc: HDC; var lprcBounds: RECT; flags: UINT): UINT; stdcall;
{$EXTERNALSYM GetBoundsRect}

function GetBrushOrgEx(hdc: HDC; var lppt: POINT): BOOL; stdcall;
{$EXTERNALSYM GetBrushOrgEx}

function GetCharWidthA(hdc: HDC; iFirstChar, iLastChar: UINT; lpBuffer: LPINT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidthA}
function GetCharWidthW(hdc: HDC; iFirstChar, iLastChar: UINT; lpBuffer: LPINT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidthW}
{$IFDEF UNICODE}
function GetCharWidth(hdc: HDC; iFirstChar, iLastChar: UINT; lpBuffer: LPINT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidth}
{$ELSE}
function GetCharWidth(hdc: HDC; iFirstChar, iLastChar: UINT; lpBuffer: LPINT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidth}
{$ENDIF}
function GetCharWidth32A(hdc: HDC; iFirstChar, iLastChar: UINT; lpBuffer: LPINT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidth32A}
function GetCharWidth32W(hdc: HDC; iFirstChar, iLastChar: UINT; lpBuffer: LPINT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidth32W}
{$IFDEF UNICODE}
function GetCharWidth32(hdc: HDC; iFirstChar, iLastChar: UINT; lpBuffer: LPINT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidth32}
{$ELSE}
function GetCharWidth32(hdc: HDC; iFirstChar, iLastChar: UINT; lpBuffer: LPINT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidth32}
{$ENDIF}
function GetCharWidthFloatA(hdc: HDC; iFirstChar, iLastChar: UINT; pxBuffer: PFLOAT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidthFloatA}
function GetCharWidthFloatW(hdc: HDC; iFirstChar, iLastChar: UINT; pxBuffer: PFLOAT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidthFloatW}
{$IFDEF UNICODE}
function GetCharWidthFloat(hdc: HDC; iFirstChar, iLastChar: UINT; pxBuffer: PFLOAT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidthFloat}
{$ELSE}
function GetCharWidthFloat(hdc: HDC; iFirstChar, iLastChar: UINT; pxBuffer: PFLOAT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidthFloat}
{$ENDIF}
function GetCharABCWidthsA(hdc: HDC; uFirstChar, uLastChar: UINT; lpAbc: LPABC): BOOL; stdcall;

{$EXTERNALSYM GetCharABCWidthsA}
function GetCharABCWidthsW(hdc: HDC; uFirstChar, uLastChar: UINT; lpAbc: LPABC): BOOL; stdcall;
{$EXTERNALSYM GetCharABCWidthsW}
{$IFDEF UNICODE}
function GetCharABCWidths(hdc: HDC; uFirstChar, uLastChar: UINT; lpAbc: LPABC): BOOL; stdcall;
{$EXTERNALSYM GetCharABCWidths}
{$ELSE}
function GetCharABCWidths(hdc: HDC; uFirstChar, uLastChar: UINT; lpAbc: LPABC): BOOL; stdcall;
{$EXTERNALSYM GetCharABCWidths}
{$ENDIF}
function GetCharABCWidthsFloatA(hdc: HDC; iFirstChar, iLastChar: UINT; lpAbcF: LPABCFLOAT): BOOL; stdcall;
{$EXTERNALSYM GetCharABCWidthsFloatA}
function GetCharABCWidthsFloatW(hdc: HDC; iFirstChar, iLastChar: UINT; lpAbcF: LPABCFLOAT): BOOL; stdcall;
{$EXTERNALSYM GetCharABCWidthsFloatW}
{$IFDEF UNICODE}
function GetCharABCWidthsFloat(hdc: HDC; iFirstChar, iLastChar: UINT; lpAbcF: LPABCFLOAT): BOOL; stdcall;
{$EXTERNALSYM GetCharABCWidthsFloat}
{$ELSE}
function GetCharABCWidthsFloat(hdc: HDC; iFirstChar, iLastChar: UINT; lpAbcF: LPABCFLOAT): BOOL; stdcall;


{$EXTERNALSYM GetCharABCWidthsFloat}
{$ENDIF}

function GetClipBox(hdc: HDC; var lprc: RECT): Integer; stdcall;
{$EXTERNALSYM GetClipBox}
function GetClipRgn(hdc: HDC; hrgn: HRGN): Integer; stdcall;
{$EXTERNALSYM GetClipRgn}
function GetMetaRgn(hdc: HDC; hrgn: HRGN): Integer; stdcall;
{$EXTERNALSYM GetMetaRgn}
function GetCurrentObject(hdc: HDC; uObjectType: UINT): HGDIOBJ; stdcall;
{$EXTERNALSYM GetCurrentObject}
function GetCurrentPositionEx(hdc: HDC; var lpPoint: POINT): BOOL; stdcall;
{$EXTERNALSYM GetCurrentPositionEx}
function GetDeviceCaps(hdc: HDC; nIndex: Integer): Integer; stdcall;
{$EXTERNALSYM GetDeviceCaps}
function GetDIBits(hdc: HDC; hbmp: HBITMAP; uStartScan, cScanLines: UINT; lpvBits: LPVOID; var lpbi: BITMAPINFO; uUsage: UINT): Integer; stdcall;
{$EXTERNALSYM GetDIBits}
function GetFontData(hdc: HDC; dwTable, dwOffset: DWORD; lpvBuffer: LPVOID; cbData: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetFontData}
function GetGlyphOutlineA(hdc: HDC; uChar, uFormat: UINT; var lpgm: GLYPHMETRICS; cbBuffer: DWORD; lpvBuffer: LPVOID; const lpMat2: MAT2): DWORD; stdcall;


{$EXTERNALSYM GetGlyphOutlineA}
function GetGlyphOutlineW(hdc: HDC; uChar, uFormat: UINT; var lpgm: GLYPHMETRICS; cbBuffer: DWORD; lpvBuffer: LPVOID; const lpMat2: MAT2): DWORD; stdcall;
{$EXTERNALSYM GetGlyphOutlineW}
{$IFDEF UNICODE}
function GetGlyphOutline(hdc: HDC; uChar, uFormat: UINT; var lpgm: GLYPHMETRICS; cbBuffer: DWORD; lpvBuffer: LPVOID; const lpMat2: MAT2): DWORD; stdcall;
{$EXTERNALSYM GetGlyphOutline}
{$ELSE}
function GetGlyphOutline(hdc: HDC; uChar, uFormat: UINT; var lpgm: GLYPHMETRICS; cbBuffer: DWORD; lpvBuffer: LPVOID; const lpMat2: MAT2): DWORD; stdcall;
{$EXTERNALSYM GetGlyphOutline}
{$ENDIF}
function GetGraphicsMode(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetGraphicsMode}
function GetMapMode(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetMapMode}
function GetMetaFileBitsEx(hmf: HMETAFILE; nSize: UINT; lpvData: LPVOID): UINT; stdcall;
{$EXTERNALSYM GetMetaFileBitsEx}
function GetMetaFileA(lpszMetaFile: LPCSTR): HMETAFILE; stdcall;
{$EXTERNALSYM GetMetaFileA}


function GetMetaFileW(lpszMetaFile: LPCWSTR): HMETAFILE; stdcall;
{$EXTERNALSYM GetMetaFileW}
{$IFDEF UNICODE}
function GetMetaFile(lpszMetaFile: LPCWSTR): HMETAFILE; stdcall;
{$EXTERNALSYM GetMetaFile}
{$ELSE}
function GetMetaFile(lpszMetaFile: LPCSTR): HMETAFILE; stdcall;
{$EXTERNALSYM GetMetaFile}
{$ENDIF}
function GetNearestColor(hdc: HDC; crColor: COLORREF): COLORREF; stdcall;
{$EXTERNALSYM GetNearestColor}
function GetNearestPaletteIndex(hPal: HPALETTE; crColor: COLORREF): UINT; stdcall;
{$EXTERNALSYM GetNearestPaletteIndex}
function GetObjectType(h: HGDIOBJ): DWORD; stdcall;
{$EXTERNALSYM GetObjectType}

function GetOutlineTextMetricsA(hdc: HDC; cbData: UINT; lpOTM: LPOUTLINETEXTMETRICA): UINT; stdcall;
{$EXTERNALSYM GetOutlineTextMetricsA}
function GetOutlineTextMetricsW(hdc: HDC; cbData: UINT; lpOTM: LPOUTLINETEXTMETRICW): UINT; stdcall;
{$EXTERNALSYM GetOutlineTextMetricsW}
{$IFDEF UNICODE}
function GetOutlineTextMetrics(hdc: HDC; cbData: UINT; lpOTM: LPOUTLINETEXTMETRICW): UINT; stdcall;


{$EXTERNALSYM GetOutlineTextMetrics}
{$ELSE}
function GetOutlineTextMetrics(hdc: HDC; cbData: UINT; lpOTM: LPOUTLINETEXTMETRICA): UINT; stdcall;
{$EXTERNALSYM GetOutlineTextMetrics}
{$ENDIF}
function GetPaletteEntries(hPal: HPALETTE; iStartIndex, nEntries: UINT; lppe: LPPALETTEENTRY): UINT; stdcall;
{$EXTERNALSYM GetPaletteEntries}
function GetPixel(hdc: HDC; nXPos, nYPos: Integer): COLORREF; stdcall;
{$EXTERNALSYM GetPixel}
function GetPixelFormat(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetPixelFormat}
function GetPolyFillMode(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetPolyFillMode}
function GetRasterizerCaps(var lprs: RASTERIZER_STATUS; cb: UINT): BOOL; stdcall;
{$EXTERNALSYM GetRasterizerCaps}
function GetRandomRgn(hdc: HDC; hrgn: HRGN; iNum: Integer): Integer; stdcall;
{$EXTERNALSYM GetRandomRgn}
function GetRegionData(hrgn: HRGN; dwCount: DWORD; lpRgnData: LPRGNDATA): DWORD; stdcall;
{$EXTERNALSYM GetRegionData}
function GetRgnBox(hrgn: HRGN; var lprc: RECT): Integer; stdcall;

{$EXTERNALSYM GetRgnBox}
function GetStockObject(fnObject: Integer): HGDIOBJ; stdcall;
{$EXTERNALSYM GetStockObject}
function GetStretchBltMode(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetStretchBltMode}
function GetSystemPaletteEntries(hdc: HDC; iStartIndex, nEntries: UINT; lppe: LPPALETTEENTRY): UINT; stdcall;
{$EXTERNALSYM GetSystemPaletteEntries}
function GetSystemPaletteUse(hdc: HDC): UINT; stdcall;
{$EXTERNALSYM GetSystemPaletteUse}
function GetTextCharacterExtra(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetTextCharacterExtra}
function GetTextAlign(hdc: HDC): UINT; stdcall;
{$EXTERNALSYM GetTextAlign}
function GetTextColor(hdc: HDC): COLORREF; stdcall;
{$EXTERNALSYM GetTextColor}

function GetTextExtentPointA(hdc: HDC; lpString: LPCSTR; cbString: Integer; var Size: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentPointA}
function GetTextExtentPointW(hdc: HDC; lpString: LPCWSTR; cbString: Integer; var Size: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentPointW}
{$IFDEF UNICODE}
function GetTextExtentPoint(hdc: HDC; lpString: LPCWSTR; cbString: Integer; var Size: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentPoint}
{$ELSE}
function GetTextExtentPoint(hdc: HDC; lpString: LPCSTR; cbString: Integer; var Size: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentPoint}
{$ENDIF}
function GetTextExtentPoint32A(hdc: HDC; lpString: LPCSTR; cbString: Integer; var Size: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentPoint32A}
function GetTextExtentPoint32W(hdc: HDC; lpString: LPCWSTR; cbString: Integer; var Size: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentPoint32W}
{$IFDEF UNICODE}
function GetTextExtentPoint32(hdc: HDC; lpString: LPCWSTR; cbString: Integer; var Size: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentPoint32}
{$ELSE}
function GetTextExtentPoint32(hdc: HDC; lpString: LPCSTR; cbString: Integer; var Size: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentPoint32}
{$ENDIF}
function GetTextExtentExPointA(hdc: HDC; lpszStr: LPCSTR; cchString, nMaxExtend: Integer; lpnFit, alpDx: LPINT; var lpSize: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentExPointA}
function GetTextExtentExPointW(hdc: HDC; lpszStr: LPCWSTR; cchString, nMaxExtend: Integer; lpnFit, alpDx: LPINT; var lpSize: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentExPointW}
{$IFDEF UNICODE}
function GetTextExtentExPoint(hdc: HDC; lpszStr: LPCWSTR; cchString, nMaxExtend: Integer; lpnFit, alpDx: LPINT; var lpSize: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentExPoint}
{$ELSE}
function GetTextExtentExPoint(hdc: HDC; lpszStr: LPCSTR; cchString, nMaxExtend: Integer; lpnFit, alpDx: LPINT; var lpSize: TSize): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentExPoint}
{$ENDIF}
function GetTextCharset(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetTextCharset}
function GetTextCharsetInfo(hdc: HDC; lpSig: LPFONTSIGNATURE; dwFlags: DWORD): Integer; stdcall;
{$EXTERNALSYM GetTextCharsetInfo}
function TranslateCharsetInfo(lpSrc: LPDWORD; lpCs: LPCHARSETINFO; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM TranslateCharsetInfo}
function GetFontLanguageInfo(hdc: HDC): DWORD; stdcall;
{$EXTERNALSYM GetFontLanguageInfo}
function GetCharacterPlacementA(hdc: HDC; lpString: LPCSTR; nCount, nMaxExtend: Integer; var lpResults: GCP_RESULTSA; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetCharacterPlacementA}
function GetCharacterPlacementW(hdc: HDC; lpString: LPCWSTR; nCount, nMaxExtend: Integer; var lpResults: GCP_RESULTSW; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetCharacterPlacementW}
{$IFDEF UNICODE}
function GetCharacterPlacement(hdc: HDC; lpString: LPCWSTR; nCount, nMaxExtend: Integer; var lpResults: GCP_RESULTSW; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetCharacterPlacement}
{$ELSE}
function GetCharacterPlacement(hdc: HDC; lpString: LPCSTR; nCount, nMaxExtend: Integer; var lpResults: GCP_RESULTSA; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetCharacterPlacement}
{$ENDIF}

type
PWcRange = ^TWcRange;
tagWCRANGE = record
wcLow: WCHAR;
cGlyphs: USHORT;
end;
{$EXTERNALSYM tagWCRANGE}
WCRANGE = tagWCRANGE;
{$EXTERNALSYM WCRANGE}
LPWCRANGE = ^WCRANGE;
{$EXTERNALSYM LPWCRANGE}
TWcRange = WCRANGE;

PGlyphSet = ^TGlyphSet;
tagGLYPHSET = record
cbThis: DWORD;
flAccel: DWORD;
cGlyphsSupported: DWORD;
cRanges: DWORD;
ranges: array [0..0] of WCRANGE;
end;
{$EXTERNALSYM tagGLYPHSET}
GLYPHSET = tagGLYPHSET;
{$EXTERNALSYM GLYPHSET}
LPGLYPHSET = ^GLYPHSET;
{$EXTERNALSYM LPGLYPHSET}
TGlyphSet = GLYPHSET;

// flAccel flags for the GLYPHSET structure above

const
GS_8BIT_INDICES = $00000001;
{$EXTERNALSYM GS_8BIT_INDICES}

// flags for GetGlyphIndices

GGI_MARK_NONEXISTING_GLYPHS = $0001;
{$EXTERNALSYM GGI_MARK_NONEXISTING_GLYPHS}

function GetFontUnicodeRanges(hdc: HDC; lpgs: LPGLYPHSET): DWORD; stdcall;
{$EXTERNALSYM GetFontUnicodeRanges}

function GetGlyphIndicesA(hdc: HDC; lpstr: LPCSTR; c: Integer; pgi: LPWORD; fl: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetGlyphIndicesA}
function GetGlyphIndicesW(hdc: HDC; lpstr: LPCWSTR; c: Integer; pgi: LPWORD; fl: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetGlyphIndicesW}

{$IFDEF UNICODE}
function GetGlyphIndices(hdc: HDC; lpstr: LPCWSTR; c: Integer; pgi: LPWORD; fl: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetGlyphIndices}
{$ELSE}
function GetGlyphIndices(hdc: HDC; lpstr: LPCSTR; c: Integer; pgi: LPWORD; fl: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetGlyphIndices}
{$ENDIF}

function GetTextExtentPointI(hdc: HDC; pgiIn: LPWORD; cgi: Integer; lpSize: LPSIZE): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentPointI}
function GetTextExtentExPointI(hdc: HDC; pgiIn: LPWORD; cgi, nMaxExtend: Integer;
lpnFit, alpDx: LPINT; lpSize: LPSIZE): BOOL; stdcall;
{$EXTERNALSYM GetTextExtentExPointI}
function GetCharWidthI(hdc: HDC; giFirst, cgi: UINT; pgi: LPWORD; lpBuffer: LPINT): BOOL; stdcall;
{$EXTERNALSYM GetCharWidthI}
function GetCharABCWidthsI(hdc: HDC; giFirst, cgi: UINT; pgi: LPWORD; lpAbc: LPABC): BOOL; stdcall;
{$EXTERNALSYM GetCharABCWidthsI}

const
STAMP_DESIGNVECTOR = ($8000000 + Ord(''d'') + (Ord(''v'') shl 8));
{$EXTERNALSYM STAMP_DESIGNVECTOR}
STAMP_AXESLIST = ($8000000 + Ord(''a'') + (Ord(''l'') shl 8));
{$EXTERNALSYM STAMP_AXESLIST}
MM_MAX_NUMAXES = 16;
{$EXTERNALSYM MM_MAX_NUMAXES}

type
PDesignVector = ^TDesignVector;
tagDESIGNVECTOR = record
dvReserved: DWORD;
dvNumAxes: DWORD;
dvValues: array [0..MM_MAX_NUMAXES - 1] of LONG;
end;
{$EXTERNALSYM tagDESIGNVECTOR}
DESIGNVECTOR = tagDESIGNVECTOR;
{$EXTERNALSYM DESIGNVECTOR}
LPDESIGNVECTOR = ^DESIGNVECTOR;
{$EXTERNALSYM LPDESIGNVECTOR}
TDesignVector = DESIGNVECTOR;

function AddFontResourceExA(lpszFilename: LPCSTR; fl: DWORD; pdv: PVOID): Integer; stdcall;
{$EXTERNALSYM AddFontResourceExA}
function AddFontResourceExW(lpszFilename: LPCWSTR; fl: DWORD; pdv: PVOID): Integer; stdcall;
{$EXTERNALSYM AddFontResourceExW}



{$IFDEF UNICODE}
function AddFontResourceEx(lpszFilename: LPCWSTR; fl: DWORD; pdv: PVOID): Integer; stdcall;
{$EXTERNALSYM AddFontResourceEx}
{$ELSE}
function AddFontResourceEx(lpszFilename: LPCSTR; fl: DWORD; pdv: PVOID): Integer; stdcall;
{$EXTERNALSYM AddFontResourceEx}
{$ENDIF}

function RemoveFontResourceExA(lpFilename: LPCSTR; fl: DWORD; pdv: PVOID): BOOL; stdcall;
{$EXTERNALSYM RemoveFontResourceExA}
function RemoveFontResourceExW(lpFilename: LPCWSTR; fl: DWORD; pdv: PVOID): BOOL; stdcall;
{$EXTERNALSYM RemoveFontResourceExW}

{$IFDEF UNICODE}
function RemoveFontResourceEx(lpFilename: LPCWSTR; fl: DWORD; pdv: PVOID): BOOL; stdcall;
{$EXTERNALSYM RemoveFontResourceEx}
{$ELSE}
function RemoveFontResourceEx(lpFilename: LPCSTR; fl: DWORD; pdv: PVOID): BOOL; stdcall;
{$EXTERNALSYM RemoveFontResourceEx}
{$ENDIF}

function AddFontMemResourceEx(pbFont: PVOID; cbFont: DWORD; pdv: PVOID; pcFonts: LPDWORD): HANDLE; stdcall;
{$EXTERNALSYM AddFontMemResourceEx}
function RemoveFontMemResourceEx(fh: HANDLE): BOOL; stdcall;
{$EXTERNALSYM RemoveFontMemResourceEx}

const
FR_PRIVATE = $10;
{$EXTERNALSYM FR_PRIVATE}
FR_NOT_ENUM = $20;
{$EXTERNALSYM FR_NOT_ENUM}

// The actual size of the DESIGNVECTOR and ENUMLOGFONTEXDV structures
// is determined by dvNumAxes,
// MM_MAX_NUMAXES only detemines the maximal size allowed

const
MM_MAX_AXES_NAMELEN = 16;
{$EXTERNALSYM MM_MAX_AXES_NAMELEN}

type
PAxisInfoA = ^TAxisInfoA;
tagAXISINFOA = record
axMinValue: LONG;
axMaxValue: LONG;
axAxisName: array [0..MM_MAX_AXES_NAMELEN - 1] of BYTE;
end;
{$EXTERNALSYM tagAXISINFOA}
AXISINFOA = tagAXISINFOA;
{$EXTERNALSYM AXISINFOA}
LPAXISINFOA = ^AXISINFOA;
{$EXTERNALSYM LPAXISINFOA}
TAxisInfoA = AXISINFOA;

PAxisInfoW = ^TAxisInfoW;
tagAXISINFOW = record
axMinValue: LONG;
axMaxValue: LONG;
axAxisName: array [0..MM_MAX_AXES_NAMELEN - 1] of WCHAR;


end;
{$EXTERNALSYM tagAXISINFOW}
AXISINFOW = tagAXISINFOW;
{$EXTERNALSYM AXISINFOW}
LPAXISINFOW = ^AXISINFOW;
{$EXTERNALSYM LPAXISINFOW}
TAxisInfoW = AXISINFOW;

{$IFDEF UNICODE}
AXISINFO = AXISINFOW;
{$EXTERNALSYM AXISINFO}
PAXISINFO = PAXISINFOW;
{$EXTERNALSYM PAXISINFO}
LPAXISINFO = LPAXISINFOW;
{$EXTERNALSYM LPAXISINFO}
TAxisInfo = TAxisInfoW;
{$ELSE}
AXISINFO = AXISINFOA;
{$EXTERNALSYM AXISINFO}
PAXISINFO = PAXISINFOA;
{$EXTERNALSYM PAXISINFO}
LPAXISINFO = LPAXISINFOA;
{$EXTERNALSYM LPAXISINFO}
TAxisInfo = TAxisInfoA;
{$ENDIF}

PAxesListA = ^TAxesListA;
tagAXESLISTA = record
axlReserved: DWORD;
axlNumAxes: DWORD;
axlAxisInfo: array [0..MM_MAX_NUMAXES - 1] of AXISINFOA;
end;
{$EXTERNALSYM tagAXESLISTA}
AXESLISTA = tagAXESLISTA;
{$EXTERNALSYM AXESLISTA}
LPAXESLISTA = ^AXESLISTA;
{$EXTERNALSYM LPAXESLISTA}
TAxesListA = tagAXESLISTA;

PAxesListW = ^TAxesListW;
tagAXESLISTW = record
axlReserved: DWORD;
axlNumAxes: DWORD;
axlAxisInfo: array [0..MM_MAX_NUMAXES - 1] of AXISINFOW;
end;
{$EXTERNALSYM tagAXESLISTW}
AXESLISTW = tagAXESLISTW;
{$EXTERNALSYM AXESLISTW}
LPAXESLISTW = ^AXESLISTW;
{$EXTERNALSYM LPAXESLISTW}
TAxesListW = tagAXESLISTW;

{$IFDEF UNICODE}
AXESLIST = AXESLISTW;
{$EXTERNALSYM AXESLIST}
PAXESLIST = PAXESLISTW;
{$EXTERNALSYM PAXESLIST}
LPAXESLIST = LPAXESLISTW;
{$EXTERNALSYM LPAXESLIST}
TAxesList = TAxesListW;
{$ELSE}
AXESLIST = AXESLISTA;
{$EXTERNALSYM AXESLIST}
PAXESLIST = PAXESLISTA;
{$EXTERNALSYM PAXESLIST}
LPAXESLIST = LPAXESLISTA;
{$EXTERNALSYM LPAXESLIST}
TAxesList = TAxesListA;
{$ENDIF}

// The actual size of the AXESLIST and ENUMTEXTMETRIC structure is
// determined by axlNumAxes,
// MM_MAX_NUMAXES only detemines the maximal size allowed

PEnumLogFontExDVA = ^TEnumLogFontExDVA;

tagENUMLOGFONTEXDVA = record
elfEnumLogfontEx: ENUMLOGFONTEXA;
elfDesignVector: DESIGNVECTOR;
end;
{$EXTERNALSYM tagENUMLOGFONTEXDVA}
ENUMLOGFONTEXDVA = tagENUMLOGFONTEXDVA;
{$EXTERNALSYM ENUMLOGFONTEXDVA}
LPENUMLOGFONTEXDVA = ^ENUMLOGFONTEXDVA;
{$EXTERNALSYM LPENUMLOGFONTEXDVA}
TEnumLogFontExDVA = tagENUMLOGFONTEXDVA;

PEnumLogFontExDVW = ^TEnumLogFontExDVW;
tagENUMLOGFONTEXDVW = record
elfEnumLogfontEx: ENUMLOGFONTEXW;
elfDesignVector: DESIGNVECTOR;
end;
{$EXTERNALSYM tagENUMLOGFONTEXDVw}
ENUMLOGFONTEXDVW = tagENUMLOGFONTEXDVW;
{$EXTERNALSYM ENUMLOGFONTEXDVW}
LPENUMLOGFONTEXDVW = ^ENUMLOGFONTEXDVW;
{$EXTERNALSYM LPENUMLOGFONTEXDVW}
TEnumLogFontExDVW = tagENUMLOGFONTEXDVW;

{$IFDEF UNICODE}
ENUMLOGFONTEXDV = ENUMLOGFONTEXDVW;
{$EXTERNALSYM ENUMLOGFONTEXDV}
PENUMLOGFONTEXDV = PENUMLOGFONTEXDVW;
{$EXTERNALSYM PENUMLOGFONTEXDV}
LPENUMLOGFONTEXDV = LPENUMLOGFONTEXDVW;
{$EXTERNALSYM LPENUMLOGFONTEXDV}
TEnumLogFontExDV = TEnumLogFontExDVW;
{$ELSE}
ENUMLOGFONTEXDV = ENUMLOGFONTEXDVA;
{$EXTERNALSYM ENUMLOGFONTEXDV}
PENUMLOGFONTEXDV = PENUMLOGFONTEXDVA;
{$EXTERNALSYM PENUMLOGFONTEXDV}
LPENUMLOGFONTEXDV = LPENUMLOGFONTEXDVA;
{$EXTERNALSYM LPENUMLOGFONTEXDV}
TEnumLogFontExDV = TEnumLogFontExDVA;
{$ENDIF}

function CreateFontIndirectExA(penumlfex: LPENUMLOGFONTEXDVA): HFONT; stdcall;
{$EXTERNALSYM CreateFontIndirectExA}
function CreateFontIndirectExW(penumlfex: LPENUMLOGFONTEXDVW): HFONT; stdcall;
{$EXTERNALSYM CreateFontIndirectExW}

{$IFDEF UNICODE}
function CreateFontIndirectEx(penumlfex: LPENUMLOGFONTEXDVW): HFONT; stdcall;
{$EXTERNALSYM CreateFontIndirectEx}
{$ELSE}
function CreateFontIndirectEx(penumlfex: LPENUMLOGFONTEXDVA): HFONT; stdcall;
{$EXTERNALSYM CreateFontIndirectEx}
{$ENDIF}

type
PEnumTextMetricA = ^TEnumTextMetricA;
tagENUMTEXTMETRICA = record
etmNewTextMetricEx: NEWTEXTMETRICEXA;


etmAxesList: AXESLISTA;
end;
{$EXTERNALSYM tagENUMTEXTMETRICA}
ENUMTEXTMETRICA = tagENUMTEXTMETRICA;
{$EXTERNALSYM ENUMTEXTMETRICA}
LPENUMTEXTMETRICA = ^ENUMTEXTMETRICA;
{$EXTERNALSYM LPENUMTEXTMETRICA}
TEnumTextMetricA = tagENUMTEXTMETRICA;

PEnumTextMetricW = ^TEnumTextMetricW;
tagENUMTEXTMETRICW = record
etmNewTextMetricEx: NEWTEXTMETRICEXW;
etmAxesList: AXESLISTW;
end;
{$EXTERNALSYM tagENUMTEXTMETRICW}
ENUMTEXTMETRICW = tagENUMTEXTMETRICW;
{$EXTERNALSYM ENUMTEXTMETRICW}
LPENUMTEXTMETRICW = ^ENUMTEXTMETRICW;
{$EXTERNALSYM LPENUMTEXTMETRICW}
TEnumTextMetricW = tagENUMTEXTMETRICW;

{$IFDEF UNICODE}
ENUMTEXTMETRIC = ENUMTEXTMETRICW;
{$EXTERNALSYM ENUMTEXTMETRIC}
PENUMTEXTMETRIC = PENUMTEXTMETRICW;
{$EXTERNALSYM PENUMTEXTMETRIC}
LPENUMTEXTMETRIC = LPENUMTEXTMETRICW;
{$EXTERNALSYM LPENUMTEXTMETRIC}
TEnumTextMetric = TEnumTextMetricW;
{$ELSE}
ENUMTEXTMETRIC = ENUMTEXTMETRICA;
{$EXTERNALSYM ENUMTEXTMETRIC}
PENUMTEXTMETRIC = PENUMTEXTMETRICA;
{$EXTERNALSYM PENUMTEXTMETRIC}
LPENUMTEXTMETRIC = LPENUMTEXTMETRICA;
{$EXTERNALSYM LPENUMTEXTMETRIC}
TEnumTextMetric = TEnumTextMetricA;
{$ENDIF}

function GetViewportExtEx(hdc: HDC; var lpSize: TSize): BOOL; stdcall;
{$EXTERNALSYM GetViewportExtEx}
function GetViewportOrgEx(hdc: HDC; var lpPoint: POINT): BOOL; stdcall;
{$EXTERNALSYM GetViewportOrgEx}
function GetWindowExtEx(hdc: HDC; var lpSize: TSize): BOOL; stdcall;
{$EXTERNALSYM GetWindowExtEx}
function GetWindowOrgEx(hdc: HDC; var lpPoint: POINT): BOOL; stdcall;
{$EXTERNALSYM GetWindowOrgEx}

function IntersectClipRect(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect: Integer): Integer; stdcall;
{$EXTERNALSYM IntersectClipRect}
function InvertRgn(hdc: HDC; hrgn: HRGN): BOOL; stdcall;
{$EXTERNALSYM InvertRgn}
function LineDDA(nXStart, nYStart, nXEnd, nYEnd: Integer; lpLineFunc: LINEDDAPROC; lpData: LPARAM): BOOL; stdcall;
{$EXTERNALSYM LineDDA}
function LineTo(hdc: HDC; nXEnd, nYEnd: Integer): BOOL; stdcall;
{$EXTERNALSYM LineTo}
function MaskBlt(hdc: HDC; nXDest, nYDest, nWidth, nHeight: Integer; hdcSrc: HDC; nXSrc, nYSrc: Integer; hbmMask: HBITMAP; xMask, yMask: Integer; dwRop: DWORD): BOOL; stdcall;
{$EXTERNALSYM MaskBlt}
function PlgBlt(hdc: HDC; lpPoint: LPPOINT; hdcSrc: HDC; nXSrc, nYSrc, nWidth, nHeight: Integer; hbmMask: HBITMAP; xMask, yMask: Integer): BOOL; stdcall;
{$EXTERNALSYM PlgBlt}

function OffsetClipRgn(hdc: HDC; nXOffset, nYOffset: Integer): Integer; stdcall;
{$EXTERNALSYM OffsetClipRgn}
function OffsetRgn(hrgn: HRGN; nXOffset, nYOffset: Integer): Integer; stdcall;
{$EXTERNALSYM OffsetRgn}
function PatBlt(hdc: HDC; nXLeft, nYLeft, nWidth, nHeight: Integer; dwRop: DWORD): BOOL; stdcall;
{$EXTERNALSYM PatBlt}
function Pie(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2: Integer): BOOL; stdcall;
{$EXTERNALSYM Pie}
function PlayMetaFile(hdc: HDC; hmf: HMETAFILE): BOOL; stdcall;
{$EXTERNALSYM PlayMetaFile}
function PaintRgn(hdc: HDC; hrgn: HRGN): BOOL; stdcall;
{$EXTERNALSYM PaintRgn}
function PolyPolygon(hdc: HDC; lpPoints: LPPOINT; lpPolyCounts: LPINT; nCount: Integer): BOOL; stdcall;
{$EXTERNALSYM PolyPolygon}
function PtInRegion(hrgn: HRGN; X, Y: Integer): BOOL; stdcall;
{$EXTERNALSYM PtInRegion}
function PtVisible(hdc: HDC; X, Y: Integer): BOOL; stdcall;
{$EXTERNALSYM PtVisible}
function RectInRegion(hrgn: HRGN; const lprc: RECT): BOOL; stdcall;
{$EXTERNALSYM RectInRegion}
function RectVisible(hdc: HDC; const lprc: RECT): BOOL; stdcall;
{$EXTERNALSYM RectVisible}
function Rectangle(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect: Integer): BOOL; stdcall;
{$EXTERNALSYM Rectangle}
function RestoreDC(hdc: HDC; nSavedDc: Integer): BOOL; stdcall;
{$EXTERNALSYM RestoreDC}
function ResetDCA(hdc: HDC; const lpInitData: DEVMODEA): HDC; stdcall;
{$EXTERNALSYM ResetDCA}


function ResetDCW(hdc: HDC; const lpInitData: DEVMODEW): HDC; stdcall;
{$EXTERNALSYM ResetDCW}
{$IFDEF UNICODE}
function ResetDC(hdc: HDC; const lpInitData: DEVMODEW): HDC; stdcall;
{$EXTERNALSYM ResetDC}
{$ELSE}
function ResetDC(hdc: HDC; const lpInitData: DEVMODEA): HDC; stdcall;
{$EXTERNALSYM ResetDC}
{$ENDIF}
function RealizePalette(hdc: HDC): UINT; stdcall;
{$EXTERNALSYM RealizePalette}
function RemoveFontResourceA(lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM RemoveFontResourceA}
function RemoveFontResourceW(lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM RemoveFontResourceW}
{$IFDEF UNICODE}
function RemoveFontResource(lpFileName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM RemoveFontResource}
{$ELSE}
function RemoveFontResource(lpFileName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM RemoveFontResource}
{$ENDIF}
function RoundRect(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect, nWidth, nHeight: Integer): BOOL; stdcall;
{$EXTERNALSYM RoundRect}
function ResizePalette(hPal: HPALETTE; nEntries: UINT): BOOL; stdcall;
{$EXTERNALSYM ResizePalette}
function SaveDC(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM SaveDC}
function SelectClipRgn(hdc: HDC; hrgn: HRGN): Integer; stdcall;
{$EXTERNALSYM SelectClipRgn}
function ExtSelectClipRgn(hdc: HDC; hrgn: HRGN; fnMode: Integer): Integer; stdcall;
{$EXTERNALSYM ExtSelectClipRgn}
function SetMetaRgn(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM SetMetaRgn}
function SelectObject(hdc: HDC; hgdiobj: HGDIOBJ): HGDIOBJ; stdcall;
{$EXTERNALSYM SelectObject}
function SelectPalette(hdc: HDC; hpal: HPALETTE; nForceBackground: BOOL): HPALETTE; stdcall;
{$EXTERNALSYM SelectPalette}
function SetBkColor(hdc: HDC; crColor: COLORREF): COLORREF; stdcall;
{$EXTERNALSYM SetBkColor}

function SetDCBrushColor(hdc: HDC; crColor: COLORREF): COLORREF; stdcall;
{$EXTERNALSYM SetDCBrushColor}
function SetDCPenColor(hdc: HDC; crColor: COLORREF): COLORREF; stdcall;
{$EXTERNALSYM SetDCPenColor}

function SetBkMode(hdc: HDC; iBlMode: Integer): Integer; stdcall;
{$EXTERNALSYM SetBkMode}
function SetBitmapBits(hbmp: HBITMAP; cBytes: DWORD; lpBits: LPVOID): LONG; stdcall;
{$EXTERNALSYM SetBitmapBits}

function SetBoundsRect(hdc: HDC; lprcBounds: LPRECT; flags: UINT): UINT; stdcall;
{$EXTERNALSYM SetBoundsRect}
function SetDIBits(hdc: HDC; hbmp: HBITMAP; uStartScan, cScanLines: UINT; lpvBits: LPVOID; const lpbmi: BITMAPINFO; fuColorUse: UINT): Integer; stdcall;
{$EXTERNALSYM SetDIBits}
function SetDIBitsToDevice(hdc: HDC; xDest, yDest: Integer; dwWidth, dwHeight: DWORD; XSrc, YSrc: Integer; uStartScan, cScanLines: UINT; lpvBits: LPVOID; const lpbmi: BITMAPINFO; fuColorUse: UINT): Integer; stdcall;
{$EXTERNALSYM SetDIBitsToDevice}
function SetMapperFlags(hdc: HDC; dwFlag: DWORD): DWORD; stdcall;
{$EXTERNALSYM SetMapperFlags}
function SetGraphicsMode(hdc: HDC; iMode: Integer): Integer; stdcall;
{$EXTERNALSYM SetGraphicsMode}
function SetMapMode(hdc: HDC; fnMapMode: Integer): Integer; stdcall;
{$EXTERNALSYM SetMapMode}

function SetLayout(hdc: HDC; dwLayOut: DWORD): DWORD; stdcall;
{$EXTERNALSYM SetLayout}
function GetLayout(hdc: HDC): DWORD; stdcall;
{$EXTERNALSYM GetLayout}

function SetMetaFileBitsEx(nSize: UINT; lpData: LPBYTE): HMETAFILE; stdcall;
{$EXTERNALSYM SetMetaFileBitsEx}
function SetPaletteEntries(hPal: HPALETTE; cStart, nEntries: UINT; lppe: LPPALETTEENTRY): UINT; stdcall;
{$EXTERNALSYM SetPaletteEntries}
function SetPixel(hdc: HDC; X, Y: Integer; crColor: COLORREF): COLORREF; stdcall;
{$EXTERNALSYM SetPixel}
function SetPixelV(hdc: HDC; X, Y: Integer; crColor: COLORREF): BOOL; stdcall;
{$EXTERNALSYM SetPixelV}
function SetPixelFormat(hdc: HDC; iPixelFormat: Integer; const ppfd: PIXELFORMATDESCRIPTOR): BOOL; stdcall;
{$EXTERNALSYM SetPixelFormat}
function SetPolyFillMode(hdc: HDC; iPolyFillMode: Integer): Integer; stdcall;
{$EXTERNALSYM SetPolyFillMode}
function StretchBlt(hdc: HDC; nXOriginDest, nYOriginDest, nWidthDest, nHeightDest: Integer; hdcSrc: HDC; nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc: Integer; dwRop: DWORD): BOOL; stdcall;

{$EXTERNALSYM StretchBlt}
function SetRectRgn(hrgn: HRGN; nLeftRect, nTopRect, nRightRect, nBottomRect: Integer): BOOL; stdcall;
{$EXTERNALSYM SetRectRgn}
function StretchDIBits(hdc: HDC; XDest, YDest, nDestWidth, nYDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight: Integer; lpBits: LPVOID; const lpBitsInfo: BITMAPINFO; iUsage: UINT; dwRop: DWORD): Integer; stdcall;
{$EXTERNALSYM StretchDIBits}
function SetROP2(hdc: HDC; fnDrawMode: Integer): Integer; stdcall;
{$EXTERNALSYM SetROP2}
function SetStretchBltMode(hdc: HDC; iStretchMode: Integer): Integer; stdcall;
{$EXTERNALSYM SetStretchBltMode}
function SetSystemPaletteUse(hdc: HDC; uUsage: UINT): UINT; stdcall;
{$EXTERNALSYM SetSystemPaletteUse}
function SetTextCharacterExtra(hdc: HDC; nCharExtra: Integer): Integer; stdcall;
{$EXTERNALSYM SetTextCharacterExtra}
function SetTextColor(hdc: HDC; crColor: COLORREF): COLORREF; stdcall;
{$EXTERNALSYM SetTextColor}
function SetTextAlign(hdc: HDC; fMode: UINT): UINT; stdcall;


{$EXTERNALSYM SetTextAlign}
function SetTextJustification(hdc: HDC; nBreakExtra, nBreakCount: Integer): BOOL; stdcall;
{$EXTERNALSYM SetTextJustification}
function UpdateColors(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM UpdateColors}

//
// image blt
//

type
COLOR16 = USHORT;
{$EXTERNALSYM COLOR16}

PTriVertex = ^TTriVertex;
_TRIVERTEX = record
x: LONG;
y: LONG;
Red: COLOR16;
Green: COLOR16;
Blue: COLOR16;
Alpha: COLOR16;
end;
{$EXTERNALSYM _TRIVERTEX}
TRIVERTEX = _TRIVERTEX;
{$EXTERNALSYM TRIVERTEX}
LPTRIVERTEX = ^TRIVERTEX;
{$EXTERNALSYM LPTRIVERTEX}
TTriVertex = _TRIVERTEX;

PGradientTriangle = ^TGradientTriangle;
_GRADIENT_TRIANGLE = record
Vertex1: ULONG;
Vertex2: ULONG;
Vertex3: ULONG;
end;
{$EXTERNALSYM _GRADIENT_TRIANGLE}
GRADIENT_TRIANGLE = _GRADIENT_TRIANGLE;
{$EXTERNALSYM GRADIENT_TRIANGLE}
LPGRADIENT_TRIANGLE = ^GRADIENT_TRIANGLE;
{$EXTERNALSYM LPGRADIENT_TRIANGLE}
PGRADIENT_TRIANGLE = ^GRADIENT_TRIANGLE;
{$EXTERNALSYM PGRADIENT_TRIANGLE}
TGradientTriangle = _GRADIENT_TRIANGLE;

PGradientRect = ^TGradientRect;
_GRADIENT_RECT = record
UpperLeft: ULONG;
LowerRight: ULONG;
end;
{$EXTERNALSYM _GRADIENT_RECT}
GRADIENT_RECT = _GRADIENT_RECT;
{$EXTERNALSYM GRADIENT_RECT}
LPGRADIENT_RECT = ^GRADIENT_RECT;
{$EXTERNALSYM LPGRADIENT_RECT}
PGRADIENT_RECT = ^GRADIENT_RECT;
{$EXTERNALSYM PGRADIENT_RECT}
TGradientRect = _GRADIENT_RECT;

PBlendFunction = ^TBlendFunction;
_BLENDFUNCTION = record
BlendOp: BYTE;
BlendFlags: BYTE;
SourceConstantAlpha: BYTE;
AlphaFormat: BYTE;
end;
{$EXTERNALSYM _BLENDFUNCTION}
BLENDFUNCTION = _BLENDFUNCTION;
{$EXTERNALSYM BLENDFUNCTION}
LPBLENDFUNCTION = ^BLENDFUNCTION;
{$EXTERNALSYM LPBLENDFUNCTION}
TBlendFunction = _BLENDFUNCTION;

//
// currentlly defined blend function
//

const
AC_SRC_OVER = $00;
{$EXTERNALSYM AC_SRC_OVER}

//
// alpha format flags
//

AC_SRC_ALPHA = $01;
{$EXTERNALSYM AC_SRC_ALPHA}

function AlphaBlend(hdcDest: HDC; nXOriginDest, nYOriginDest, nWidthDest,
nHeightDest: Integer; hdcSrc: HDC; nXOriginSrc, nYOriginSrc, nWidthSrc,
nHeightSrc: Integer; blendFunction: BLENDFUNCTION): BOOL; stdcall;
{$EXTERNALSYM AlphaBlend}

function TransparentBlt(hdcSrc: HDC; nXOriginSrc, nYOriginSrc, nWidthSrc,
nHeightSrc: Integer; hdcDest: HDC; nXOriginDest, nYOriginDest, nWidthDest,
nHeightDest: Integer; blendFunction: BLENDFUNCTION): BOOL; stdcall;
{$EXTERNALSYM TransparentBlt}

//
// gradient drawing modes
//

const
GRADIENT_FILL_RECT_H = $00000000;
{$EXTERNALSYM GRADIENT_FILL_RECT_H}
GRADIENT_FILL_RECT_V = $00000001;
{$EXTERNALSYM GRADIENT_FILL_RECT_V}
GRADIENT_FILL_TRIANGLE = $00000002;
{$EXTERNALSYM GRADIENT_FILL_TRIANGLE}
GRADIENT_FILL_OP_FLAG = $000000ff;
{$EXTERNALSYM GRADIENT_FILL_OP_FLAG}

function GradientFill(hdc: HDC; pVertex: PTRIVERTEX; dwNumVertex: ULONG; pMesh: PVOID; dwNumMesh, dwMode: ULONG): BOOL; stdcall;
{$EXTERNALSYM GradientFill}
function PlayMetaFileRecord(hdc: HDC; lpHandleTable: LPHANDLETABLE; lpMetaRecord: LPMETARECORD; nHandles: UINT): BOOL; stdcall;
{$EXTERNALSYM PlayMetaFileRecord}

type
MFENUMPROC = function (hdc: HDC; lpHTable: LPHANDLETABLE; lpMFR: LPMETARECORD; nObj: Integer; lpClientData: LPARAM): Integer; stdcall;
{$EXTERNALSYM MFENUMPROC}

function EnumMetaFile(hdc: HDC; hemf: HMETAFILE; lpMetaFunc: MFENUMPROC; lParam: LPARAM): BOOL; stdcall;
{$EXTERNALSYM EnumMetaFile}

type
ENHMFENUMPROC = function (hdc: HDC; lpHTable: LPHANDLETABLE; lpEMFR: LPENHMETARECORD; nObj: Integer; lpData: LPARAM): Integer; stdcall;
{$EXTERNALSYM ENHMFENUMPROC}

// Enhanced Metafile Function Declarations

function CloseEnhMetaFile(hdc: HDC): HENHMETAFILE; stdcall;
{$EXTERNALSYM CloseEnhMetaFile}
function CopyEnhMetaFileA(hemfSrc: HENHMETAFILE; lpszFile: LPCSTR): HENHMETAFILE; stdcall;
{$EXTERNALSYM CopyEnhMetaFileA}
function CopyEnhMetaFileW(hemfSrc: HENHMETAFILE; lpszFile: LPCWSTR): HENHMETAFILE; stdcall;
{$EXTERNALSYM CopyEnhMetaFileW}
{$IFDEF UNICODE}
function CopyEnhMetaFile(hemfSrc: HENHMETAFILE; lpszFile: LPCWSTR): HENHMETAFILE; stdcall;
{$EXTERNALSYM CopyEnhMetaFile}
{$ELSE}
function CopyEnhMetaFile(hemfSrc: HENHMETAFILE; lpszFile: LPCSTR): HENHMETAFILE; stdcall;
{$EXTERNALSYM CopyEnhMetaFile}
{$ENDIF}
function CreateEnhMetaFileA(hdcRef: HDC; lpFileName: LPCSTR; const lpRect: RECT; lpDescription: LPCSTR): HDC; stdcall;
{$EXTERNALSYM CreateEnhMetaFileA}
function CreateEnhMetaFileW(hdcRef: HDC; lpFileName: LPCWSTR; const lpRect: RECT; lpDescription: LPCWSTR): HDC; stdcall;
{$EXTERNALSYM CreateEnhMetaFileW}
{$IFDEF UNICODE}
function CreateEnhMetaFile(hdcRef: HDC; lpFileName: LPCWSTR; const lpRect: RECT; lpDescription: LPCWSTR): HDC; stdcall;
{$EXTERNALSYM CreateEnhMetaFile}

{$ELSE}
function CreateEnhMetaFile(hdcRef: HDC; lpFileName: LPCSTR; const lpRect: RECT; lpDescription: LPCSTR): HDC; stdcall;
{$EXTERNALSYM CreateEnhMetaFile}
{$ENDIF}

function DeleteEnhMetaFile(hemf: HENHMETAFILE): BOOL; stdcall;
{$EXTERNALSYM DeleteEnhMetaFile}
function EnumEnhMetaFile(hdc: HDC; hemf: HENHMETAFILE; lpEnhMetaFunc: ENHMFENUMPROC; lpData: LPVOID; const lpRect: RECT): BOOL; stdcall;
{$EXTERNALSYM EnumEnhMetaFile}
function GetEnhMetaFileA(lpszMetaFile: LPCSTR): HENHMETAFILE; stdcall;
{$EXTERNALSYM GetEnhMetaFileA}
function GetEnhMetaFileW(lpszMetaFile: LPCWSTR): HENHMETAFILE; stdcall;
{$EXTERNALSYM GetEnhMetaFileW}
{$IFDEF UNICODE}
function GetEnhMetaFile(lpszMetaFile: LPCWSTR): HENHMETAFILE; stdcall;
{$EXTERNALSYM GetEnhMetaFile}
{$ELSE}
function GetEnhMetaFile(lpszMetaFile: LPCSTR): HENHMETAFILE; stdcall;
{$EXTERNALSYM GetEnhMetaFile}
{$ENDIF}
function GetEnhMetaFileBits(hemf: HENHMETAFILE; cbBuffer: UINT; lpBuffer: LPBYTE): UINT; stdcall;
{$EXTERNALSYM GetEnhMetaFileBits}
function GetEnhMetaFileDescriptionA(hemf: HENHMETAFILE; cchBuffer: UINT; lpszDescription: LPSTR): UINT; stdcall;
{$EXTERNALSYM GetEnhMetaFileDescriptionA}
function GetEnhMetaFileDescriptionW(hemf: HENHMETAFILE; cchBuffer: UINT; lpszDescription: LPWSTR): UINT; stdcall;
{$EXTERNALSYM GetEnhMetaFileDescriptionW}
{$IFDEF UNICODE}
function GetEnhMetaFileDescription(hemf: HENHMETAFILE; cchBuffer: UINT; lpszDescription: LPWSTR): UINT; stdcall;
{$EXTERNALSYM GetEnhMetaFileDescription}
{$ELSE}
function GetEnhMetaFileDescription(hemf: HENHMETAFILE; cchBuffer: UINT; lpszDescription: LPSTR): UINT; stdcall;
{$EXTERNALSYM GetEnhMetaFileDescription}
{$ENDIF}
function GetEnhMetaFileHeader(hemf: HENHMETAFILE; cbBuffer: UINT; lpemh: LPENHMETAHEADER ): UINT; stdcall;
{$EXTERNALSYM GetEnhMetaFileHeader}
function GetEnhMetaFilePaletteEntries(hemf: HENHMETAFILE; cEntries: UINT; lppe: LPPALETTEENTRY ): UINT; stdcall;
{$EXTERNALSYM GetEnhMetaFilePaletteEntries}

function GetEnhMetaFilePixelFormat(hemf: HENHMETAFILE; cbBuffer: UINT; var ppfd: PIXELFORMATDESCRIPTOR): UINT; stdcall;
{$EXTERNALSYM GetEnhMetaFilePixelFormat}
function GetWinMetaFileBits(hemf: HENHMETAFILE; cbBuffer: UINT; lpbBuffer: LPBYTE; fnMapMode: Integer; hdcRef: HDC): UINT; stdcall;
{$EXTERNALSYM GetWinMetaFileBits}
function PlayEnhMetaFile(hdc: HDC; hemf: HENHMETAFILE; const lpRect: RECT): BOOL; stdcall;
{$EXTERNALSYM PlayEnhMetaFile}
function PlayEnhMetaFileRecord(hdc: HDC; lpHandleTable: LPHANDLETABLE; lpEnhMetaRecord: LPENHMETARECORD; nHandles: UINT): BOOL; stdcall;
{$EXTERNALSYM PlayEnhMetaFileRecord}
function SetEnhMetaFileBits(cbBuffer: UINT; lpData: LPBYTE): HENHMETAFILE; stdcall;
{$EXTERNALSYM SetEnhMetaFileBits}
function SetWinMetaFileBits(cbBuffer: UINT; lpbBuffer: LPBYTE; hdcRef: HDC; const lpmfp: METAFILEPICT): HENHMETAFILE; stdcall;
{$EXTERNALSYM SetWinMetaFileBits}
function GdiComment(hdc: HDC; cbSize: UINT; lpData: LPBYTE): BOOL; stdcall;
{$EXTERNALSYM GdiComment}



function GetTextMetricsA(hdc: HDC; var lptm: TEXTMETRICA): BOOL; stdcall;
{$EXTERNALSYM GetTextMetricsA}
function GetTextMetricsW(hdc: HDC; var lptm: TEXTMETRICW): BOOL; stdcall;
{$EXTERNALSYM GetTextMetricsW}
{$IFDEF UNICODE}
function GetTextMetrics(hdc: HDC; var lptm: TEXTMETRICW): BOOL; stdcall;
{$EXTERNALSYM GetTextMetrics}
{$ELSE}
function GetTextMetrics(hdc: HDC; var lptm: TEXTMETRICA): BOOL; stdcall;
{$EXTERNALSYM GetTextMetrics}
{$ENDIF}

// new GDI

type
PDibSection = ^TDibSection;
tagDIBSECTION = record
dsBm: BITMAP;
dsBmih: BITMAPINFOHEADER;
dsBitfields: array [0..2] of DWORD;
dshSection: HANDLE;
dsOffset: DWORD;
end;
{$EXTERNALSYM tagDIBSECTION}
DIBSECTION = tagDIBSECTION;
{$EXTERNALSYM DIBSECTION}
LPDIBSECTION = ^DIBSECTION;
{$EXTERNALSYM LPDIBSECTION}
TDibSection = DIBSECTION;

function AngleArc(hdc: HDC; X, Y: Integer; dwRadius: DWORD; eStartAngle, eSweepAngle: FLOAT): BOOL; stdcall;

{$EXTERNALSYM AngleArc}
function PolyPolyline(hdc: HDC; lppt: LPPOINT; lpdwPolyPoints: LPDWORD; cCount: DWORD): BOOL; stdcall;
{$EXTERNALSYM PolyPolyline}
function GetWorldTransform(hdc: HDC; lpXform: LPXFORM): BOOL; stdcall;
{$EXTERNALSYM GetWorldTransform}
function SetWorldTransform(hdc: HDC; lpXform: LPXFORM): BOOL; stdcall;
{$EXTERNALSYM SetWorldTransform}
function ModifyWorldTransform(hdc: HDC; lpXform: LPXFORM; iMode: DWORD): BOOL; stdcall;
{$EXTERNALSYM ModifyWorldTransform}
function CombineTransform(lpxformResult, lpXform1, lpXform2: LPXFORM): BOOL; stdcall;
{$EXTERNALSYM CombineTransform}
function CreateDIBSection(hdc: HDC; pbmi: LPBITMAPINFO; iUsage: UINT;
ppvBits: PPVOID; hSection: HANDLE; dwOffset: DWORD): HBITMAP; stdcall;
{$EXTERNALSYM CreateDIBSection}
function GetDIBColorTable(hdc: HDC; uStartIndex, cEntries: UINT; pColors: PRGBQUAD): UINT; stdcall;
{$EXTERNALSYM GetDIBColorTable}
function SetDIBColorTable(hdc: HDC; uStartIndex, cEntries: UINT; pColors: PRGBQUAD): UINT; stdcall;
{$EXTERNALSYM SetDIBColorTable}

// Flags value for COLORADJUSTMENT

const
CA_NEGATIVE = $0001;
{$EXTERNALSYM CA_NEGATIVE}
CA_LOG_FILTER = $0002;
{$EXTERNALSYM CA_LOG_FILTER}

// IlluminantIndex values

ILLUMINANT_DEVICE_DEFAULT = 0;
{$EXTERNALSYM ILLUMINANT_DEVICE_DEFAULT}
ILLUMINANT_A = 1;
{$EXTERNALSYM ILLUMINANT_A}
ILLUMINANT_B = 2;
{$EXTERNALSYM ILLUMINANT_B}
ILLUMINANT_C = 3;
{$EXTERNALSYM ILLUMINANT_C}
ILLUMINANT_D50 = 4;
{$EXTERNALSYM ILLUMINANT_D50}
ILLUMINANT_D55 = 5;
{$EXTERNALSYM ILLUMINANT_D55}
ILLUMINANT_D65 = 6;
{$EXTERNALSYM ILLUMINANT_D65}
ILLUMINANT_D75 = 7;
{$EXTERNALSYM ILLUMINANT_D75}
ILLUMINANT_F2 = 8;
{$EXTERNALSYM ILLUMINANT_F2}
ILLUMINANT_MAX_INDEX = ILLUMINANT_F2;
{$EXTERNALSYM ILLUMINANT_MAX_INDEX}

ILLUMINANT_TUNGSTEN = ILLUMINANT_A;
{$EXTERNALSYM ILLUMINANT_TUNGSTEN}
ILLUMINANT_DAYLIGHT = ILLUMINANT_C;
{$EXTERNALSYM ILLUMINANT_DAYLIGHT}
ILLUMINANT_FLUORESCENT = ILLUMINANT_F2;
{$EXTERNALSYM ILLUMINANT_FLUORESCENT}
ILLUMINANT_NTSC = ILLUMINANT_C;
{$EXTERNALSYM ILLUMINANT_NTSC}

// Min and max for RedGamma, GreenGamma, BlueGamma

RGB_GAMMA_MIN = WORD(02500);
{$EXTERNALSYM RGB_GAMMA_MIN}
RGB_GAMMA_MAX = WORD(65000);
{$EXTERNALSYM RGB_GAMMA_MAX}

// Min and max for ReferenceBlack and ReferenceWhite

REFERENCE_WHITE_MIN = WORD(6000);
{$EXTERNALSYM REFERENCE_WHITE_MIN}
REFERENCE_WHITE_MAX = WORD(10000);
{$EXTERNALSYM REFERENCE_WHITE_MAX}
REFERENCE_BLACK_MIN = WORD(0);
{$EXTERNALSYM REFERENCE_BLACK_MIN}
REFERENCE_BLACK_MAX = WORD(4000);
{$EXTERNALSYM REFERENCE_BLACK_MAX}

// Min and max for Contrast, Brightness, Colorfulness, RedGreenTint

COLOR_ADJ_MIN = SHORT(-100);
{$EXTERNALSYM COLOR_ADJ_MIN}
COLOR_ADJ_MAX = SHORT(100);
{$EXTERNALSYM COLOR_ADJ_MAX}

type
PColorAdjustment = ^TColorAdjustment;
tagCOLORADJUSTMENT = record
caSize: WORD;
caFlags: WORD;
caIlluminantIndex: WORD;
caRedGamma: WORD;
caGreenGamma: WORD;
caBlueGamma: WORD;
caReferenceBlack: WORD;
caReferenceWhite: WORD;
caContrast: SHORT;
caBrightness: SHORT;
caColorfulness: SHORT;
caRedGreenTint: SHORT;
end;
{$EXTERNALSYM tagCOLORADJUSTMENT}
COLORADJUSTMENT = tagCOLORADJUSTMENT;
{$EXTERNALSYM COLORADJUSTMENT}
LPCOLORADJUSTMENT = ^COLORADJUSTMENT;
{$EXTERNALSYM LPCOLORADJUSTMENT}
TColorAdjustment = COLORADJUSTMENT;

function SetColorAdjustment(hdc: HDC; lpca: LPCOLORADJUSTMENT): BOOL; stdcall;
{$EXTERNALSYM SetColorAdjustment}
function GetColorAdjustment(hdc: HDC; lpca: LPCOLORADJUSTMENT): BOOL; stdcall;
{$EXTERNALSYM GetColorAdjustment}
function CreateHalftonePalette(hdc: HDC): HPALETTE; stdcall;
{$EXTERNALSYM CreateHalftonePalette}


type
ABORTPROC = function (hdc: HDC; iError: Integer): BOOL; stdcall;
{$EXTERNALSYM ABORTPROC}

PDocInfoA = ^TDocInfoA;
_DOCINFOA = record
cbSize: Integer;
lpszDocName: LPCSTR;
lpszOutput: LPCSTR;
{$IFDEF WINVER_0400_GREATER}
lpszDatatype: LPCSTR;
fwType: DWORD;
{$ENDIF}
end;
{$EXTERNALSYM _DOCINFOA}
DOCINFOA = _DOCINFOA;
{$EXTERNALSYM DOCINFOA}
LPDOCINFOA = ^DOCINFOA;
{$EXTERNALSYM LPDOCINFOA}
TDocInfoA = _DOCINFOA;

PDocInfoW = ^TDocInfoW;
_DOCINFOW = record
cbSize: Integer;
lpszDocName: LPCWSTR;
lpszOutput: LPCWSTR;
{$IFDEF WINVER_0400_GREATER}
lpszDatatype: LPCWSTR;
fwType: DWORD;
{$ENDIF}
end;
{$EXTERNALSYM _DOCINFOW}
DOCINFOW = _DOCINFOW;
{$EXTERNALSYM DOCINFOW}
LPDOCINFOW = ^DOCINFOW;
{$EXTERNALSYM LPDOCINFOW}
TDocInfoW = _DOCINFOW;

{$IFDEF UNICODE}
DOCINFO = DOCINFOW;
{$EXTERNALSYM DOCINFO}

LPDOCINFO = LPDOCINFOW;
{$EXTERNALSYM LPDOCINFO}
TDocInfo = TDocInfoW;
PDocInfo = PDocInfoW;
{$ELSE}
DOCINFO = DOCINFOA;
{$EXTERNALSYM DOCINFO}
LPDOCINFO = LPDOCINFOA;
{$EXTERNALSYM LPDOCINFO}
TDocInfo = TDocInfoA;
PDocInfo = PDocInfoA;
{$ENDIF}

const
DI_APPBANDING = $00000001;
{$EXTERNALSYM DI_APPBANDING}
DI_ROPS_READ_DESTINATION = $00000002;
{$EXTERNALSYM DI_ROPS_READ_DESTINATION}

function StartDocA(hdc: HDC; const lpdi: DOCINFOA): Integer; stdcall;
{$EXTERNALSYM StartDocA}
function StartDocW(hdc: HDC; const lpdi: DOCINFOW): Integer; stdcall;
{$EXTERNALSYM StartDocW}
{$IFDEF UNICODE}
function StartDoc(hdc: HDC; const lpdi: DOCINFOW): Integer; stdcall;
{$EXTERNALSYM StartDoc}
{$ELSE}
function StartDoc(hdc: HDC; const lpdi: DOCINFOA): Integer; stdcall;
{$EXTERNALSYM StartDoc}
{$ENDIF}
function EndDoc(dc: HDC): Integer; stdcall;
{$EXTERNALSYM EndDoc}
function StartPage(dc: HDC): Integer; stdcall;


{$EXTERNALSYM StartPage}
function EndPage(dc: HDC): Integer; stdcall;
{$EXTERNALSYM EndPage}
function AbortDoc(dc: HDC): Integer; stdcall;
{$EXTERNALSYM AbortDoc}
function SetAbortProc(dc: HDC; lpAbortProc: ABORTPROC): Integer; stdcall;
{$EXTERNALSYM SetAbortProc}

function AbortPath(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM AbortPath}
function ArcTo(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2: Integer): BOOL; stdcall;
{$EXTERNALSYM ArcTo}
function BeginPath(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM BeginPath}
function CloseFigure(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM CloseFigure}
function EndPath(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM EndPath}
function FillPath(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM FillPath}
function FlattenPath(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM FlattenPath}
function GetPath(hdc: HDC; lpPoints: LPPOINT; lpTypes: LPBYTE; nSize: Integer): Integer; stdcall;
{$EXTERNALSYM GetPath}


function PathToRegion(hdc: HDC): HRGN; stdcall;
{$EXTERNALSYM PathToRegion}
function PolyDraw(hdc: HDC; lppt: LPPOINT; lpbTypes: LPBYTE; cCount: Integer): BOOL; stdcall;
{$EXTERNALSYM PolyDraw}
function SelectClipPath(hdc: HDC; iMode: Integer): BOOL; stdcall;
{$EXTERNALSYM SelectClipPath}
function SetArcDirection(hdc: HDC; ArcDirection: Integer): Integer; stdcall;
{$EXTERNALSYM SetArcDirection}
function SetMiterLimit(hdc: HDC; eNewLimit: FLOAT; peOldLimit: PFLOAT): BOOL; stdcall;
{$EXTERNALSYM SetMiterLimit}
function StrokeAndFillPath(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM StrokeAndFillPath}
function StrokePath(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM StrokePath}
function WidenPath(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM WidenPath}
function ExtCreatePen(dwPenStyle, dwWidth: DWORD; const lplb: LOGBRUSH; dwStyleCount: DWORD; lpStyle: DWORD): HPEN; stdcall;
{$EXTERNALSYM ExtCreatePen}
function GetMiterLimit(hdc: HDC; var peLimit: FLOAT): BOOL; stdcall;
{$EXTERNALSYM GetMiterLimit}
function GetArcDirection(hdc: HDC): Integer; stdcall;
{$EXTERNALSYM GetArcDirection}

function GetObjectA(hgdiobj: HGDIOBJ; cbBuffer: Integer; lpvObject: LPVOID): Integer; stdcall;
{$EXTERNALSYM GetObjectA}
function GetObjectW(hgdiobj: HGDIOBJ; cbBuffer: Integer; lpvObject: LPVOID): Integer; stdcall;
{$EXTERNALSYM GetObjectW}
{$IFDEF UNICODE}
function GetObject(hgdiobj: HGDIOBJ; cbBuffer: Integer; lpvObject: LPVOID): Integer; stdcall;
{$EXTERNALSYM GetObject}
{$ELSE}
function GetObject(hgdiobj: HGDIOBJ; cbBuffer: Integer; lpvObject: LPVOID): Integer; stdcall;
{$EXTERNALSYM GetObject}
{$ENDIF}
function MoveToEx(hdc: HDC; X, Y: Integer; lpPoint: LPPOINT): BOOL; stdcall;
{$EXTERNALSYM MoveToEx}
function TextOutA(hdc: HDC; nXStart, nYStart: Integer; lpString: LPCSTR; cbString: Integer): BOOL; stdcall;
{$EXTERNALSYM TextOutA}
function TextOutW(hdc: HDC; nXStart, nYStart: Integer; lpString: LPCWSTR; cbString: Integer): BOOL; stdcall;
{$EXTERNALSYM TextOutW}

{$IFDEF UNICODE}
function TextOut(hdc: HDC; nXStart, nYStart: Integer; lpString: LPCWSTR; cbString: Integer): BOOL; stdcall;
{$EXTERNALSYM TextOut}
{$ELSE}
function TextOut(hdc: HDC; nXStart, nYStart: Integer; lpString: LPCSTR; cbString: Integer): BOOL; stdcall;
{$EXTERNALSYM TextOut}
{$ENDIF}
function ExtTextOutA(hdc: HDC; X, Y: Integer; fuOptions: UINT; lprc: LPRECT; lpString: LPCSTR; cbCount: UINT; lpDx: LPINT): BOOL; stdcall;
{$EXTERNALSYM ExtTextOutA}
function ExtTextOutW(hdc: HDC; X, Y: Integer; fuOptions: UINT; lprc: LPRECT; lpString: LPCWSTR; cbCount: UINT; lpDx: LPINT): BOOL; stdcall;
{$EXTERNALSYM ExtTextOutW}
{$IFDEF UNICODE}
function ExtTextOut(hdc: HDC; X, Y: Integer; fuOptions: UINT; lprc: LPRECT; lpString: LPCWSTR; cbCount: UINT; lpDx: LPINT): BOOL; stdcall;
{$EXTERNALSYM ExtTextOut}
{$ELSE}
function ExtTextOut(hdc: HDC; X, Y: Integer; fuOptions: UINT; lprc: LPRECT; lpString: LPCSTR; cbCount: UINT; lpDx: LPINT): BOOL; stdcall;
{$EXTERNALSYM ExtTextOut}


{$ENDIF}
function PolyTextOutA(hdc: HDC; pptxt: LPPOLYTEXTA; cStrings: Integer): BOOL; stdcall;
{$EXTERNALSYM PolyTextOutA}
function PolyTextOutW(hdc: HDC; pptxt: LPPOLYTEXTW; cStrings: Integer): BOOL; stdcall;
{$EXTERNALSYM PolyTextOutW}
{$IFDEF UNICODE}
function PolyTextOut(hdc: HDC; pptxt: LPPOLYTEXTW; cStrings: Integer): BOOL; stdcall;
{$EXTERNALSYM PolyTextOut}
{$ELSE}
function PolyTextOut(hdc: HDC; pptxt: LPPOLYTEXTA; cStrings: Integer): BOOL; stdcall;
{$EXTERNALSYM PolyTextOut}
{$ENDIF}

function CreatePolygonRgn(lppt: LPPOINT; cPoints, fnPolyFillMode: Integer): HRGN; stdcall;
{$EXTERNALSYM CreatePolygonRgn}
function DPtoLP(hdc: HDC; lpPoints: LPPOINT; nCount: Integer): BOOL; stdcall;
{$EXTERNALSYM DPtoLP}
function LPtoDP(hdc: HDC; lpPoints: LPPOINT; nCount: Integer): BOOL; stdcall;
{$EXTERNALSYM LPtoDP}
function Polygon(hdc: HDC; lpPoints: LPPOINT; nCount: Integer): BOOL; stdcall;
{$EXTERNALSYM Polygon}
function Polyline(hdc: HDC; lppt: LPPOINT; nCount: Integer): BOOL; stdcall;
{$EXTERNALSYM Polyline}

function PolyBezier(hdc: HDC; lppt: LPPOINT; cPoints: DWORD): BOOL; stdcall;
{$EXTERNALSYM PolyBezier}
function PolyBezierTo(hdc: HDC; lppt: LPPOINT; cCount: DWORD): BOOL; stdcall;
{$EXTERNALSYM PolyBezierTo}
function PolylineTo(hdc: HDC; lppt: LPPOINT; cCount: DWORD): BOOL; stdcall;
{$EXTERNALSYM PolylineTo}

function SetViewportExtEx(hdc: HDC; nXExtend, nYExtend: Integer; lpSize: LPSIZE): BOOL; stdcall;
{$EXTERNALSYM SetViewportExtEx}
function SetViewportOrgEx(hdc: HDC; X, Y: Integer; lpPoint: LPPOINT): BOOL; stdcall;
{$EXTERNALSYM SetViewportOrgEx}
function SetWindowExtEx(hdc: HDC; nXExtend, nYExtend: Integer; lpSize: LPSIZE): BOOL; stdcall;
{$EXTERNALSYM SetWindowExtEx}
function SetWindowOrgEx(hdc: HDC; X, Y: Integer; lpPoint: LPPOINT): BOOL; stdcall;
{$EXTERNALSYM SetWindowOrgEx}

function OffsetViewportOrgEx(hdc: HDC; nXOffset, nYOffset: Integer; lpPoint: LPPOINT): BOOL; stdcall;
{$EXTERNALSYM OffsetViewportOrgEx}
function OffsetWindowOrgEx(hdc: HDC; nXOffset, nYOffset: Integer; lpPoint: LPPOINT): BOOL; stdcall;


{$EXTERNALSYM OffsetWindowOrgEx}
function ScaleViewportExtEx(hdc: HDC; Xnum, Xdenom, Ynum, Ydenom: Integer; lpSize: LPSIZE): BOOL; stdcall;
{$EXTERNALSYM ScaleViewportExtEx}
function ScaleWindowExtEx(hdc: HDC; Xnum, Xdenom, Ynum, Ydenom: Integer; lpSize: LPSIZE): BOOL; stdcall;
{$EXTERNALSYM ScaleWindowExtEx}
function SetBitmapDimensionEx(hBitmap: HBITMAP; nWidth, nHeight: Integer; lpSize: LPSIZE): BOOL; stdcall;
{$EXTERNALSYM SetBitmapDimensionEx}
function SetBrushOrgEx(hdc: HDC; nXOrg, nYOrg: Integer; lppt: LPPOINT): BOOL; stdcall;
{$EXTERNALSYM SetBrushOrgEx}

function GetTextFaceA(hdc: HDC; nCount: Integer; lpFaceName: LPSTR): Integer; stdcall;
{$EXTERNALSYM GetTextFaceA}
function GetTextFaceW(hdc: HDC; nCount: Integer; lpFaceName: LPWSTR): Integer; stdcall;
{$EXTERNALSYM GetTextFaceW}
{$IFDEF UNICODE}
function GetTextFace(hdc: HDC; nCount: Integer; lpFaceName: LPWSTR): Integer; stdcall;
{$EXTERNALSYM GetTextFace}
{$ELSE}
function GetTextFace(hdc: HDC; nCount: Integer; lpFaceName: LPSTR): Integer; stdcall;
{$EXTERNALSYM GetTextFace}
{$ENDIF}

const
FONTMAPPER_MAX = 10;
{$EXTERNALSYM FONTMAPPER_MAX}

type
PKerningPair = ^TKerningPair;
tagKERNINGPAIR = record
wFirst: WORD;
wSecond: WORD;
iKernAmount: Integer;
end;
{$EXTERNALSYM tagKERNINGPAIR}
KERNINGPAIR = tagKERNINGPAIR;
{$EXTERNALSYM KERNINGPAIR}
LPKERNINGPAIR = ^KERNINGPAIR;
{$EXTERNALSYM LPKERNINGPAIR}
TKerningPair = KERNINGPAIR;

function GetKerningPairsA(hDc: HDC; nNumPairs: DWORD; lpkrnpair: LPKERNINGPAIR): DWORD; stdcall;
{$EXTERNALSYM GetKerningPairsA}
function GetKerningPairsW(hDc: HDC; nNumPairs: DWORD; lpkrnpair: LPKERNINGPAIR): DWORD; stdcall;
{$EXTERNALSYM GetKerningPairsW}

{$IFDEF UNICODE}
function GetKerningPairs(hDc: HDC; nNumPairs: DWORD; lpkrnpair: LPKERNINGPAIR): DWORD; stdcall;
{$EXTERNALSYM GetKerningPairs}
{$ELSE}
function GetKerningPairs(hDc: HDC; nNumPairs: DWORD; lpkrnpair: LPKERNINGPAIR): DWORD; stdcall;
{$EXTERNALSYM GetKerningPairs}

{$ENDIF}

function GetDCOrgEx(hdc: HDC; lpPoint: LPPOINT): BOOL; stdcall;
{$EXTERNALSYM GetDCOrgEx}
function FixBrushOrgEx(hDc: HDC; I1, I2: Integer; lpPoint: LPPOINT): BOOL; stdcall;
{$EXTERNALSYM FixBrushOrgEx}
function UnrealizeObject(hgdiobj: HGDIOBJ): BOOL; stdcall;
{$EXTERNALSYM UnrealizeObject}

function GdiFlush: BOOL; stdcall;
{$EXTERNALSYM GdiFlush}
function GdiSetBatchLimit(dwLimit: DWORD): DWORD; stdcall;
{$EXTERNALSYM GdiSetBatchLimit}
function GdiGetBatchLimit: DWORD; stdcall;
{$EXTERNALSYM GdiGetBatchLimit}

const
ICM_OFF = 1;
{$EXTERNALSYM ICM_OFF}
ICM_ON = 2;
{$EXTERNALSYM ICM_ON}
ICM_QUERY = 3;
{$EXTERNALSYM ICM_QUERY}
ICM_DONE_OUTSIDEDC = 4;
{$EXTERNALSYM ICM_DONE_OUTSIDEDC}

type
ICMENUMPROCA = function (lpszFileName: LPSTR; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM ICMENUMPROCA}
ICMENUMPROCW = function (lpszFileName: LPWSTR; lParam: LPARAM): Integer; stdcall;


{$EXTERNALSYM ICMENUMPROCW}

{$IFDEF UNICODE}
ICMENUMPROC = function (lpszFileName: LPWSTR; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM ICMENUMPROC}
{$ELSE}
ICMENUMPROC = function (lpszFileName: LPSTR; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM ICMENUMPROC}
{$ENDIF}

function SetICMMode(hDc: HDC; iEnableICM: Integer): Integer; stdcall;
{$EXTERNALSYM SetICMMode}
function CheckColorsInGamut(hDc: HDC; lpRGBTriples, lpBuffer: LPVOID; nCount: DWORD): BOOL; stdcall;
{$EXTERNALSYM CheckColorsInGamut}
function GetColorSpace(hDc: HDC): HCOLORSPACE; stdcall;
{$EXTERNALSYM GetColorSpace}

function GetLogColorSpaceA(hColorSpace: HCOLORSPACE; lpBuffer: LPLOGCOLORSPACEA; nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetLogColorSpaceA}
function GetLogColorSpaceW(hColorSpace: HCOLORSPACE; lpBuffer: LPLOGCOLORSPACEW; nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetLogColorSpaceW}

{$IFDEF UNICODE}
function GetLogColorSpace(hColorSpace: HCOLORSPACE; lpBuffer: LPLOGCOLORSPACEW; nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetLogColorSpace}
{$ELSE}
function GetLogColorSpace(hColorSpace: HCOLORSPACE; lpBuffer: LPLOGCOLORSPACEA; nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetLogColorSpace}
{$ENDIF}

function CreateColorSpaceA(lpLogColorSpace: LPLOGCOLORSPACEA): HCOLORSPACE; stdcall;
{$EXTERNALSYM CreateColorSpaceA}
function CreateColorSpaceW(lpLogColorSpace: LPLOGCOLORSPACEW): HCOLORSPACE; stdcall;
{$EXTERNALSYM CreateColorSpaceW}

{$IFDEF UNICODE}
function CreateColorSpace(lpLogColorSpace: LPLOGCOLORSPACEW): HCOLORSPACE; stdcall;
{$EXTERNALSYM CreateColorSpace}
{$ELSE}
function CreateColorSpace(lpLogColorSpace: LPLOGCOLORSPACEA): HCOLORSPACE; stdcall;
{$EXTERNALSYM CreateColorSpace}
{$ENDIF}

function SetColorSpace(hDc: HDC; hColorSpace: HCOLORSPACE): HCOLORSPACE; stdcall;
{$EXTERNALSYM SetColorSpace}
function DeleteColorSpace(hColorSpace: HCOLORSPACE): BOOL; stdcall;
{$EXTERNALSYM DeleteColorSpace}
function GetICMProfileA(hDc: HDC; lpcbName: LPDWORD; lpszFilename: LPSTR): BOOL; stdcall;


{$EXTERNALSYM GetICMProfileA}
function GetICMProfileW(hDc: HDC; lpcbName: LPDWORD; lpszFilename: LPWSTR): BOOL; stdcall;
{$EXTERNALSYM GetICMProfileW}

{$IFDEF UNICODE}
function GetICMProfile(hDc: HDC; lpcbName: LPDWORD; lpszFilename: LPWSTR): BOOL; stdcall;
{$EXTERNALSYM GetICMProfile}
{$ELSE}
function GetICMProfile(hDc: HDC; lpcbName: LPDWORD; lpszFilename: LPSTR): BOOL; stdcall;
{$EXTERNALSYM GetICMProfile}
{$ENDIF}

function SetICMProfileA(hDc: HDC; lpFileName: LPSTR): BOOL; stdcall;
{$EXTERNALSYM SetICMProfileA}
function SetICMProfileW(hDc: HDC; lpFileName: LPWSTR): BOOL; stdcall;
{$EXTERNALSYM SetICMProfileW}

{$IFDEF UNICODE}
function SetICMProfile(hDc: HDC; lpFileName: LPWSTR): BOOL; stdcall;
{$EXTERNALSYM SetICMProfile}
{$ELSE}
function SetICMProfile(hDc: HDC; lpFileName: LPSTR): BOOL; stdcall;
{$EXTERNALSYM SetICMProfile}
{$ENDIF}

function GetDeviceGammaRamp(hDc: HDC; lpRamp: LPVOID): BOOL; stdcall;
{$EXTERNALSYM GetDeviceGammaRamp}

function SetDeviceGammaRamp(hDc: HDC; lpRamp: LPVOID): BOOL; stdcall;
{$EXTERNALSYM SetDeviceGammaRamp}
function ColorMatchToTarget(hDc, hdcTarget: HDC; uiAction: DWORD): BOOL; stdcall;
{$EXTERNALSYM ColorMatchToTarget}

function EnumICMProfilesA(hDc: HDC; lpEnumProc: ICMENUMPROCA; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumICMProfilesA}
function EnumICMProfilesW(hDc: HDC; lpEnumProc: ICMENUMPROCW; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumICMProfilesW}

{$IFDEF UNICODE}
function EnumICMProfiles(hDc: HDC; lpEnumProc: ICMENUMPROCW; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumICMProfiles}
{$ELSE}
function EnumICMProfiles(hDc: HDC; lpEnumProc: ICMENUMPROCA; lParam: LPARAM): Integer; stdcall;
{$EXTERNALSYM EnumICMProfiles}
{$ENDIF}

function UpdateICMRegKeyA(dwReserved: DWORD; lpszCMID, lpszFileName: LPSTR; nCommand: UINT): BOOL; stdcall;
{$EXTERNALSYM UpdateICMRegKeyA}
function UpdateICMRegKeyW(dwReserved: DWORD; lpszCMID, lpszFileName: LPWSTR; nCommand: UINT): BOOL; stdcall;
{$EXTERNALSYM UpdateICMRegKeyW}

{$IFDEF UNICODE}
function UpdateICMRegKey(dwReserved: DWORD; lpszCMID, lpszFileName: LPWSTR; nCommand: UINT): BOOL; stdcall;
{$EXTERNALSYM UpdateICMRegKey}
{$ELSE}
function UpdateICMRegKey(dwReserved: DWORD; lpszCMID, lpszFileName: LPSTR; nCommand: UINT): BOOL; stdcall;
{$EXTERNALSYM UpdateICMRegKey}
{$ENDIF}

function ColorCorrectPalette(hDc: HDC; hColorPalette: HPALETTE; dwFirstEntry, dwNumOfEntries: DWORD): BOOL; stdcall;
{$EXTERNALSYM ColorCorrectPalette}

// Enhanced metafile constants.

const
ENHMETA_SIGNATURE = $464D4520;
{$EXTERNALSYM ENHMETA_SIGNATURE}

// Stock object flag used in the object handle index in the enhanced
// metafile records.
// E.g. The object handle index (META_STOCK_OBJECT | BLACK_BRUSH)
// represents the stock object BLACK_BRUSH.

ENHMETA_STOCK_OBJECT = DWORD($80000000);
{$EXTERNALSYM ENHMETA_STOCK_OBJECT}

// Enhanced metafile record types.

EMR_HEADER = 1;
{$EXTERNALSYM EMR_HEADER}
EMR_POLYBEZIER = 2;
{$EXTERNALSYM EMR_POLYBEZIER}
EMR_POLYGON = 3;
{$EXTERNALSYM EMR_POLYGON}
EMR_POLYLINE = 4;
{$EXTERNALSYM EMR_POLYLINE}
EMR_POLYBEZIERTO = 5;
{$EXTERNALSYM EMR_POLYBEZIERTO}
EMR_POLYLINETO = 6;
{$EXTERNALSYM EMR_POLYLINETO}
EMR_POLYPOLYLINE = 7;
{$EXTERNALSYM EMR_POLYPOLYLINE}
EMR_POLYPOLYGON = 8;
{$EXTERNALSYM EMR_POLYPOLYGON}
EMR_SETWINDOWEXTEX = 9;
{$EXTERNALSYM EMR_SETWINDOWEXTEX}
EMR_SETWINDOWORGEX = 10;
{$EXTERNALSYM EMR_SETWINDOWORGEX}
EMR_SETVIEWPORTEXTEX = 11;
{$EXTERNALSYM EMR_SETVIEWPORTEXTEX}
EMR_SETVIEWPORTORGEX = 12;
{$EXTERNALSYM EMR_SETVIEWPORTORGEX}
EMR_SETBRUSHORGEX = 13;
{$EXTERNALSYM EMR_SETBRUSHORGEX}
EMR_EOF = 14;
{$EXTERNALSYM EMR_EOF}
EMR_SETPIXELV = 15;
{$EXTERNALSYM EMR_SETPIXELV}


EMR_SETMAPPERFLAGS = 16;
{$EXTERNALSYM EMR_SETMAPPERFLAGS}
EMR_SETMAPMODE = 17;
{$EXTERNALSYM EMR_SETMAPMODE}
EMR_SETBKMODE = 18;
{$EXTERNALSYM EMR_SETBKMODE}
EMR_SETPOLYFILLMODE = 19;
{$EXTERNALSYM EMR_SETPOLYFILLMODE}
EMR_SETROP2 = 20;
{$EXTERNALSYM EMR_SETROP2}
EMR_SETSTRETCHBLTMODE = 21;
{$EXTERNALSYM EMR_SETSTRETCHBLTMODE}
EMR_SETTEXTALIGN = 22;
{$EXTERNALSYM EMR_SETTEXTALIGN}
EMR_SETCOLORADJUSTMENT = 23;
{$EXTERNALSYM EMR_SETCOLORADJUSTMENT}
EMR_SETTEXTCOLOR = 24;
{$EXTERNALSYM EMR_SETTEXTCOLOR}
EMR_SETBKCOLOR = 25;
{$EXTERNALSYM EMR_SETBKCOLOR}
EMR_OFFSETCLIPRGN = 26;
{$EXTERNALSYM EMR_OFFSETCLIPRGN}
EMR_MOVETOEX = 27;
{$EXTERNALSYM EMR_MOVETOEX}
EMR_SETMETARGN = 28;
{$EXTERNALSYM EMR_SETMETARGN}
EMR_EXCLUDECLIPRECT = 29;
{$EXTERNALSYM EMR_EXCLUDECLIPRECT}
EMR_INTERSECTCLIPRECT = 30;

{$EXTERNALSYM EMR_INTERSECTCLIPRECT}
EMR_SCALEVIEWPORTEXTEX = 31;
{$EXTERNALSYM EMR_SCALEVIEWPORTEXTEX}
EMR_SCALEWINDOWEXTEX = 32;
{$EXTERNALSYM EMR_SCALEWINDOWEXTEX}
EMR_SAVEDC = 33;
{$EXTERNALSYM EMR_SAVEDC}
EMR_RESTOREDC = 34;
{$EXTERNALSYM EMR_RESTOREDC}
EMR_SETWORLDTRANSFORM = 35;
{$EXTERNALSYM EMR_SETWORLDTRANSFORM}
EMR_MODIFYWORLDTRANSFORM = 36;
{$EXTERNALSYM EMR_MODIFYWORLDTRANSFORM}
EMR_SELECTOBJECT = 37;
{$EXTERNALSYM EMR_SELECTOBJECT}
EMR_CREATEPEN = 38;
{$EXTERNALSYM EMR_CREATEPEN}
EMR_CREATEBRUSHINDIRECT = 39;
{$EXTERNALSYM EMR_CREATEBRUSHINDIRECT}
EMR_DELETEOBJECT = 40;
{$EXTERNALSYM EMR_DELETEOBJECT}
EMR_ANGLEARC = 41;
{$EXTERNALSYM EMR_ANGLEARC}
EMR_ELLIPSE = 42;
{$EXTERNALSYM EMR_ELLIPSE}
EMR_RECTANGLE = 43;
{$EXTERNALSYM EMR_RECTANGLE}
EMR_ROUNDRECT = 44;


{$EXTERNALSYM EMR_ROUNDRECT}
EMR_ARC = 45;
{$EXTERNALSYM EMR_ARC}
EMR_CHORD = 46;
{$EXTERNALSYM EMR_CHORD}
EMR_PIE = 47;
{$EXTERNALSYM EMR_PIE}
EMR_SELECTPALETTE = 48;
{$EXTERNALSYM EMR_SELECTPALETTE}
EMR_CREATEPALETTE = 49;
{$EXTERNALSYM EMR_CREATEPALETTE}
EMR_SETPALETTEENTRIES = 50;
{$EXTERNALSYM EMR_SETPALETTEENTRIES}
EMR_RESIZEPALETTE = 51;
{$EXTERNALSYM EMR_RESIZEPALETTE}
EMR_REALIZEPALETTE = 52;
{$EXTERNALSYM EMR_REALIZEPALETTE}
EMR_EXTFLOODFILL = 53;
{$EXTERNALSYM EMR_EXTFLOODFILL}
EMR_LINETO = 54;
{$EXTERNALSYM EMR_LINETO}
EMR_ARCTO = 55;
{$EXTERNALSYM EMR_ARCTO}
EMR_POLYDRAW = 56;
{$EXTERNALSYM EMR_POLYDRAW}
EMR_SETARCDIRECTION = 57;
{$EXTERNALSYM EMR_SETARCDIRECTION}
EMR_SETMITERLIMIT = 58;
{$EXTERNALSYM EMR_SETMITERLIMIT}
EMR_BEGINPATH = 59;
{$EXTERNALSYM EMR_BEGINPATH}
EMR_ENDPATH = 60;
{$EXTERNALSYM EMR_ENDPATH}
EMR_CLOSEFIGURE = 61;
{$EXTERNALSYM EMR_CLOSEFIGURE}
EMR_FILLPATH = 62;
{$EXTERNALSYM EMR_FILLPATH}
EMR_STROKEANDFILLPATH = 63;
{$EXTERNALSYM EMR_STROKEANDFILLPATH}
EMR_STROKEPATH = 64;
{$EXTERNALSYM EMR_STROKEPATH}
EMR_FLATTENPATH = 65;
{$EXTERNALSYM EMR_FLATTENPATH}
EMR_WIDENPATH = 66;
{$EXTERNALSYM EMR_WIDENPATH}
EMR_SELECTCLIPPATH = 67;
{$EXTERNALSYM EMR_SELECTCLIPPATH}
EMR_ABORTPATH = 68;
{$EXTERNALSYM EMR_ABORTPATH}

EMR_GDICOMMENT = 70;
{$EXTERNALSYM EMR_GDICOMMENT}
EMR_FILLRGN = 71;
{$EXTERNALSYM EMR_FILLRGN}
EMR_FRAMERGN = 72;
{$EXTERNALSYM EMR_FRAMERGN}
EMR_INVERTRGN = 73;
{$EXTERNALSYM EMR_INVERTRGN}
EMR_PAINTRGN = 74;


{$EXTERNALSYM EMR_PAINTRGN}
EMR_EXTSELECTCLIPRGN = 75;
{$EXTERNALSYM EMR_EXTSELECTCLIPRGN}
EMR_BITBLT = 76;
{$EXTERNALSYM EMR_BITBLT}
EMR_STRETCHBLT = 77;
{$EXTERNALSYM EMR_STRETCHBLT}
EMR_MASKBLT = 78;
{$EXTERNALSYM EMR_MASKBLT}
EMR_PLGBLT = 79;
{$EXTERNALSYM EMR_PLGBLT}
EMR_SETDIBITSTODEVICE = 80;
{$EXTERNALSYM EMR_SETDIBITSTODEVICE}
EMR_STRETCHDIBITS = 81;
{$EXTERNALSYM EMR_STRETCHDIBITS}
EMR_EXTCREATEFONTINDIRECTW = 82;
{$EXTERNALSYM EMR_EXTCREATEFONTINDIRECTW}
EMR_EXTTEXTOUTA = 83;
{$EXTERNALSYM EMR_EXTTEXTOUTA}
EMR_EXTTEXTOUTW = 84;
{$EXTERNALSYM EMR_EXTTEXTOUTW}
EMR_POLYBEZIER16 = 85;
{$EXTERNALSYM EMR_POLYBEZIER16}
EMR_POLYGON16 = 86;
{$EXTERNALSYM EMR_POLYGON16}
EMR_POLYLINE16 = 87;
{$EXTERNALSYM EMR_POLYLINE16}
EMR_POLYBEZIERTO16 = 88;
{$EXTERNALSYM EMR_POLYBEZIERTO16}
EMR_POLYLINETO16 = 89;
{$EXTERNALSYM EMR_POLYLINETO16}
EMR_POLYPOLYLINE16 = 90;
{$EXTERNALSYM EMR_POLYPOLYLINE16}
EMR_POLYPOLYGON16 = 91;
{$EXTERNALSYM EMR_POLYPOLYGON16}
EMR_POLYDRAW16 = 92;
{$EXTERNALSYM EMR_POLYDRAW16}
EMR_CREATEMONOBRUSH = 93;
{$EXTERNALSYM EMR_CREATEMONOBRUSH}
EMR_CREATEDIBPATTERNBRUSHPT = 94;
{$EXTERNALSYM EMR_CREATEDIBPATTERNBRUSHPT}
EMR_EXTCREATEPEN = 95;
{$EXTERNALSYM EMR_EXTCREATEPEN}
EMR_POLYTEXTOUTA = 96;
{$EXTERNALSYM EMR_POLYTEXTOUTA}
EMR_POLYTEXTOUTW = 97;
{$EXTERNALSYM EMR_POLYTEXTOUTW}

EMR_SETICMMODE = 98;
{$EXTERNALSYM EMR_SETICMMODE}
EMR_CREATECOLORSPACE = 99;
{$EXTERNALSYM EMR_CREATECOLORSPACE}
EMR_SETCOLORSPACE = 100;
{$EXTERNALSYM EMR_SETCOLORSPACE}
EMR_DELETECOLORSPACE = 101;
{$EXTERNALSYM EMR_DELETECOLORSPACE}
EMR_GLSRECORD = 102;
{$EXTERNALSYM EMR_GLSRECORD}
EMR_GLSBOUNDEDRECORD = 103;
{$EXTERNALSYM EMR_GLSBOUNDEDRECORD}
EMR_PIXELFORMAT = 104;
{$EXTERNALSYM EMR_PIXELFORMAT}

EMR_RESERVED_105 = 105;
{$EXTERNALSYM EMR_RESERVED_105}
EMR_RESERVED_106 = 106;
{$EXTERNALSYM EMR_RESERVED_106}
EMR_RESERVED_107 = 107;
{$EXTERNALSYM EMR_RESERVED_107}
EMR_RESERVED_108 = 108;
{$EXTERNALSYM EMR_RESERVED_108}
EMR_RESERVED_109 = 109;
{$EXTERNALSYM EMR_RESERVED_109}
EMR_RESERVED_110 = 110;
{$EXTERNALSYM EMR_RESERVED_110}
EMR_COLORCORRECTPALETTE = 111;
{$EXTERNALSYM EMR_COLORCORRECTPALETTE}
EMR_SETICMPROFILEA = 112;
{$EXTERNALSYM EMR_SETICMPROFILEA}
EMR_SETICMPROFILEW = 113;
{$EXTERNALSYM EMR_SETICMPROFILEW}
EMR_ALPHABLEND = 114;
{$EXTERNALSYM EMR_ALPHABLEND}
EMR_SETLAYOUT = 115;
{$EXTERNALSYM EMR_SETLAYOUT}
EMR_TRANSPARENTBLT = 116;
{$EXTERNALSYM EMR_TRANSPARENTBLT}
EMR_RESERVED_117 = 117;
{$EXTERNALSYM EMR_RESERVED_117}
EMR_GRADIENTFILL = 118;
{$EXTERNALSYM EMR_GRADIENTFILL}
EMR_RESERVED_119 = 119;
{$EXTERNALSYM EMR_RESERVED_119}
EMR_RESERVED_120 = 120;
{$EXTERNALSYM EMR_RESERVED_120}
EMR_COLORMATCHTOTARGETW = 121;
{$EXTERNALSYM EMR_COLORMATCHTOTARGETW}
EMR_CREATECOLORSPACEW = 122;
{$EXTERNALSYM EMR_CREATECOLORSPACEW}

EMR_MIN = 1;
{$EXTERNALSYM EMR_MIN}

{$IFDEF WINVER_0500_GREATER}
EMR_MAX = 122;
{$EXTERNALSYM EMR_MAX}
{$ELSE}
{$IFDEF WINVER_0400_GREATER}
EMR_MAX = 104;
{$EXTERNALSYM EMR_MAX}
{$ELSE}
EMR_MAX = 97;
{$EXTERNALSYM EMR_MAX}
{$ENDIF}
{$ENDIF}

// Base record type for the enhanced metafile.

type
PEmr = ^TEmr;
tagEMR = record
iType: DWORD; // Enhanced metafile record type
nSize: DWORD; // Length of the record in bytes.
// This must be a multiple of 4.


end;
{$EXTERNALSYM tagEMR}
EMR = tagEMR;
{$EXTERNALSYM EMR}
TEmr = EMR;

// Base text record type for the enhanced metafile.

PEmrText = ^TEmrText;
tagEMRTEXT = record
ptlReference: POINTL;
nChars: DWORD;
offString: DWORD; // Offset to the string
fOptions: DWORD;
rcl: RECTL;
offDx: DWORD; // Offset to the inter-character spacing array.
// This is always given.
end;
{$EXTERNALSYM tagEMRTEXT}
EMRTEXT = tagEMRTEXT;
{$EXTERNALSYM EMRTEXT}
TEmrText = EMRTEXT;

// Record structures for the enhanced metafile.

PAbortPath = ^TAbortPath;
tagABORTPATH = record
emr: EMR;
end;
{$EXTERNALSYM tagABORTPATH}
TAbortPath = tagABORTPATH;
EMRABORTPATH = tagABORTPATH;
{$EXTERNALSYM EMRABORTPATH}
PEMRABORTPATH = ^EMRABORTPATH;
{$EXTERNALSYM PEMRABORTPATH}
EMRBEGINPATH = tagABORTPATH;
{$EXTERNALSYM EMRBEGINPATH}
PEMRBEGINPATH = ^EMRBEGINPATH;
{$EXTERNALSYM PEMRBEGINPATH}
EMRENDPATH = tagABORTPATH;
{$EXTERNALSYM EMRENDPATH}
PEMRENDPATH = ^EMRENDPATH;
{$EXTERNALSYM PEMRENDPATH}
EMRCLOSEFIGURE = tagABORTPATH;
{$EXTERNALSYM EMRCLOSEFIGURE}
PEMRCLOSEFIGURE = ^EMRCLOSEFIGURE;
{$EXTERNALSYM PEMRCLOSEFIGURE}
EMRFLATTENPATH = tagABORTPATH;
{$EXTERNALSYM EMRFLATTENPATH}
PEMRFLATTENPATH = ^EMRFLATTENPATH;
{$EXTERNALSYM PEMRFLATTENPATH}
EMRWIDENPATH = tagABORTPATH;
{$EXTERNALSYM EMRWIDENPATH}
PEMRWIDENPATH = ^EMRWIDENPATH;
{$EXTERNALSYM PEMRWIDENPATH}
EMRSETMETARGN = tagABORTPATH;
{$EXTERNALSYM EMRSETMETARGN}
PEMRSETMETARGN = ^EMRSETMETARGN;
{$EXTERNALSYM PEMRSETMETARGN}
EMRSAVEDC = tagABORTPATH;
{$EXTERNALSYM EMRSAVEDC}
PEMRSAVEDC = ^EMRSAVEDC;
{$EXTERNALSYM PEMRSAVEDC}
EMRREALIZEPALETTE = tagABORTPATH;
{$EXTERNALSYM EMRREALIZEPALETTE}
PEMRREALIZEPALETTE = ^EMRREALIZEPALETTE;
{$EXTERNALSYM PEMRREALIZEPALETTE}

PEmrSelectClipPath = ^TEmrSelectClipPath;
tagEMRSELECTCLIPPATH = record
emr: EMR;
iMode: DWORD;
end;
{$EXTERNALSYM tagEMRSELECTCLIPPATH}
EMRSELECTCLIPPATH = tagEMRSELECTCLIPPATH;
{$EXTERNALSYM EMRSELECTCLIPPATH}
LPEMRSELECTCLIPPATH = ^EMRSELECTCLIPPATH;
{$EXTERNALSYM LPEMRSELECTCLIPPATH}
TEmrSelectClipPath = EMRSELECTCLIPPATH;

EMRSETBKMODE = tagEMRSELECTCLIPPATH;
{$EXTERNALSYM EMRSETBKMODE}
PEMRSETBKMODE = ^EMRSETBKMODE;
{$EXTERNALSYM PEMRSETBKMODE}
EMRSETMAPMODE = tagEMRSELECTCLIPPATH;
{$EXTERNALSYM EMRSETMAPMODE}
PEMRSETMAPMODE = ^EMRSETMAPMODE;
{$EXTERNALSYM PEMRSETMAPMODE}
EMRSETLAYOUT = tagEMRSELECTCLIPPATH;
{$EXTERNALSYM EMRSETLAYOUT}
PEMRSETLAYOUT = ^EMRSETLAYOUT;
{$EXTERNALSYM PEMRSETLAYOUT}
EMRSETPOLYFILLMODE = tagEMRSELECTCLIPPATH;
{$EXTERNALSYM EMRSETPOLYFILLMODE}
PEMRSETPOLYFILLMODE = EMRSETPOLYFILLMODE;
{$EXTERNALSYM PEMRSETPOLYFILLMODE}
EMRSETROP2 = tagEMRSELECTCLIPPATH;
{$EXTERNALSYM EMRSETROP2}


PEMRSETROP2 = ^EMRSETROP2;
{$EXTERNALSYM PEMRSETROP2}
EMRSETSTRETCHBLTMODE = tagEMRSELECTCLIPPATH;
{$EXTERNALSYM EMRSETSTRETCHBLTMODE}
PEMRSETSTRETCHBLTMODE = ^EMRSETSTRETCHBLTMODE;
{$EXTERNALSYM PEMRSETSTRETCHBLTMODE}
EMRSETICMMODE = tagEMRSELECTCLIPPATH;
{$EXTERNALSYM EMRSETICMMODE}
PEMRSETICMMODE = ^EMRSETICMMODE;
{$EXTERNALSYM PEMRSETICMMODE}
EMRSETTEXTALIGN = tagEMRSELECTCLIPPATH;
{$EXTERNALSYM EMRSETTEXTALIGN}
PEMRSETTEXTALIGN = ^EMRSETTEXTALIGN;
{$EXTERNALSYM PEMRSETTEXTALIGN}

PEmrSetMiterLimit = ^TEmrSetMiterLimit;
tagEMRSETMITERLIMIT = record
emr: EMR;
eMiterLimit: FLOAT;
end;
{$EXTERNALSYM tagEMRSETMITERLIMIT}
EMRSETMITERLIMIT = tagEMRSETMITERLIMIT;
{$EXTERNALSYM EMRSETMITERLIMIT}
TEmrSetMiterLimit = EMRSETMITERLIMIT;

PEmrRestoreDc = ^TEmrRestoreDc;
tagEMRRESTOREDC = record
emr: EMR;
iRelative: LONG; // Specifies a relative instance
end;
{$EXTERNALSYM tagEMRRESTOREDC}
EMRRESTOREDC = tagEMRRESTOREDC;
{$EXTERNALSYM EMRRESTOREDC}
TEmrRestoreDc = EMRRESTOREDC;

PEmrSetArcDirection = ^TEmrSetArcDirection;
tagEMRSETARCDIRECTION = record
emr: EMR;
iArcDirection: DWORD; // Specifies the arc direction in the
// advanced graphics mode.
end;
{$EXTERNALSYM tagEMRSETARCDIRECTION}
EMRSETARCDIRECTION = tagEMRSETARCDIRECTION;
{$EXTERNALSYM EMRSETARCDIRECTION}
TEmrSetArcDirection = EMRSETARCDIRECTION;

PEmrSetMapperFlags = ^TEmrSetMapperFlags;
tagEMRSETMAPPERFLAGS = record
emr: EMR;
dwFlags: DWORD;
end;
{$EXTERNALSYM tagEMRSETMAPPERFLAGS}
EMRSETMAPPERFLAGS = tagEMRSETMAPPERFLAGS;
{$EXTERNALSYM EMRSETMAPPERFLAGS}
TEmrSetMapperFlags = EMRSETMAPPERFLAGS;

PEmrSetTextColor = ^TEmrSetTextColor;
tagEMRSETTEXTCOLOR = record
emr: EMR;
crColor: COLORREF;
end;
{$EXTERNALSYM tagEMRSETTEXTCOLOR}
EMRSETTEXTCOLOR = tagEMRSETTEXTCOLOR;
{$EXTERNALSYM EMRSETTEXTCOLOR}

EMRSETBKCOLOR = tagEMRSETTEXTCOLOR;
{$EXTERNALSYM EMRSETBKCOLOR}
PEMRSETBKCOLOR = ^EMRSETTEXTCOLOR;
{$EXTERNALSYM PEMRSETBKCOLOR}
TEmrSetTextColor = EMRSETTEXTCOLOR;

PEmrSelectObject = ^TEmrSelectObject;
tagEMRSELECTOBJECT = record
emr: EMR;
ihObject: DWORD; // Object handle index
end;
{$EXTERNALSYM tagEMRSELECTOBJECT}
EMRSELECTOBJECT = tagEMRSELECTOBJECT;
{$EXTERNALSYM EMRSELECTOBJECT}
EMRDELETEOBJECT = tagEMRSELECTOBJECT;
{$EXTERNALSYM EMRDELETEOBJECT}
PEMRDELETEOBJECT = ^EMRDELETEOBJECT;
{$EXTERNALSYM PEMRDELETEOBJECT}
TEmrSelectObject = EMRSELECTOBJECT;

PEmrSelectPalette = ^TEmrSelectPalette;
tagEMRSELECTPALETTE = record
emr: EMR;
ihPal: DWORD; // Palette handle index, background mode only
end;
{$EXTERNALSYM tagEMRSELECTPALETTE}
EMRSELECTPALETTE = tagEMRSELECTPALETTE;
{$EXTERNALSYM EMRSELECTPALETTE}
TEmrSelectPalette = EMRSELECTPALETTE;

PEmrResizePalette = ^TEmrResizePalette;
tagEMRRESIZEPALETTE = record
emr: EMR;
ihPal: DWORD; // Palette handle index
cEntries: DWORD;
end;
{$EXTERNALSYM tagEMRRESIZEPALETTE}
EMRRESIZEPALETTE = tagEMRRESIZEPALETTE;
{$EXTERNALSYM EMRRESIZEPALETTE}
TEmrResizePalette = EMRRESIZEPALETTE;

PEmrSetPaletteEntries = ^TEmrSetPaletteEntries;
tagEMRSETPALETTEENTRIES = record
emr: EMR;
ihPal: DWORD; // Palette handle index
iStart: DWORD;
cEntries: DWORD;
aPalEntries: array [0..0] of PALETTEENTRY; // The peFlags fields do not contain any flags
end;
{$EXTERNALSYM tagEMRSETPALETTEENTRIES}
EMRSETPALETTEENTRIES = tagEMRSETPALETTEENTRIES;
{$EXTERNALSYM EMRSETPALETTEENTRIES}
TEmrSetPaletteEntries = EMRSETPALETTEENTRIES;

PEmrSetColorAdjustment = ^TEmrSetColorAdjustment;
tagEMRSETCOLORADJUSTMENT = record
emr: EMR;
ColorAdjustment: COLORADJUSTMENT;
end;
{$EXTERNALSYM tagEMRSETCOLORADJUSTMENT}
EMRSETCOLORADJUSTMENT = tagEMRSETCOLORADJUSTMENT;
{$EXTERNALSYM EMRSETCOLORADJUSTMENT}
TEmrSetColorAdjustment = EMRSETCOLORADJUSTMENT;

PEmrGdiComment = ^TEmrGdiComment;
tagEMRGDICOMMENT = record
emr: EMR;
cbData: DWORD; // Size of data in bytes
Data: array [0..0] of BYTE;
end;
{$EXTERNALSYM tagEMRGDICOMMENT}
EMRGDICOMMENT = tagEMRGDICOMMENT;
{$EXTERNALSYM EMRGDICOMMENT}
TEmrGdiComment = EMRGDICOMMENT;

PEmrEof = ^TEmrEof;
tagEMREOF = record
emr: EMR;
nPalEntries: DWORD; // Number of palette entries
offPalEntries: DWORD; // Offset to the palette entries
nSizeLast: DWORD; // Same as nSize and must be the last DWORD
// of the record. The palette entries,
// if exist, precede this field.
end;
{$EXTERNALSYM tagEMREOF}
EMREOF = tagEMREOF;
{$EXTERNALSYM EMREOF}
TEmrEof = EMREOF;

PEmrLineTo = ^TEmrLineTo;
tagEMRLINETO = record
emr: EMR;
ptl: POINTL;
end;
{$EXTERNALSYM tagEMRLINETO}
EMRLINETO = tagEMRLINETO;
{$EXTERNALSYM EMRLINETO}
EMRMOVETOEX = tagEMRLINETO;
{$EXTERNALSYM EMRMOVETOEX}
PEMRMOVETOEX = ^EMRMOVETOEX;
{$EXTERNALSYM PEMRMOVETOEX}
TEmrLineTo = EMRLINETO;

PEmrOffsetClipRgn = ^TEmrOffsetClipRgn;
tagEMROFFSETCLIPRGN = record
emr: EMR;
ptlOffset: POINTL;
end;
{$EXTERNALSYM tagEMROFFSETCLIPRGN}
EMROFFSETCLIPRGN = tagEMROFFSETCLIPRGN;
{$EXTERNALSYM EMROFFSETCLIPRGN}
TEmrOffsetClipRgn = EMROFFSETCLIPRGN;

PEmrFillPath = ^TEmrFillPath;
tagEMRFILLPATH = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
end;
{$EXTERNALSYM tagEMRFILLPATH}
EMRFILLPATH = tagEMRFILLPATH;
{$EXTERNALSYM EMRFILLPATH}
EMRSTROKEANDFILLPATH = tagEMRFILLPATH;
{$EXTERNALSYM EMRSTROKEANDFILLPATH}
PEMRSTROKEANDFILLPATH = ^EMRSTROKEANDFILLPATH;
{$EXTERNALSYM PEMRSTROKEANDFILLPATH}
EMRSTROKEPATH = tagEMRFILLPATH;
{$EXTERNALSYM EMRSTROKEPATH}
PEMRSTROKEPATH = ^EMRSTROKEPATH;
{$EXTERNALSYM PEMRSTROKEPATH}
TEmrFillPath = EMRFILLPATH;

PEmrExcludeClipRect = ^TEmrExcludeClipRect;
tagEMREXCLUDECLIPRECT = record
emr: EMR;
rclClip: RECTL;
end;
{$EXTERNALSYM tagEMREXCLUDECLIPRECT}
EMREXCLUDECLIPRECT = tagEMREXCLUDECLIPRECT;
{$EXTERNALSYM EMREXCLUDECLIPRECT}
EMRINTERSECTCLIPRECT = tagEMREXCLUDECLIPRECT;
{$EXTERNALSYM EMRINTERSECTCLIPRECT}
PEMRINTERSECTCLIPRECT = ^EMRINTERSECTCLIPRECT;
{$EXTERNALSYM PEMRINTERSECTCLIPRECT}
TEmrExcludeClipRect = EMREXCLUDECLIPRECT;

PEmrSetViewPortOrgEx = ^TEmrSetViewPortOrgEx;
tagEMRSETVIEWPORTORGEX = record
emr: EMR;
ptlOrigin: POINTL;
end;
{$EXTERNALSYM tagEMRSETVIEWPORTORGEX}
EMRSETVIEWPORTORGEX = tagEMRSETVIEWPORTORGEX;
{$EXTERNALSYM EMRSETVIEWPORTORGEX}
EMRSETWINDOWORGEX = tagEMRSETVIEWPORTORGEX;
{$EXTERNALSYM EMRSETWINDOWORGEX}
PEMRSETWINDOWORGEX = ^EMRSETWINDOWORGEX;
{$EXTERNALSYM PEMRSETWINDOWORGEX}
EMRSETBRUSHORGEX = tagEMRSETVIEWPORTORGEX;
{$EXTERNALSYM EMRSETBRUSHORGEX}
PEMRSETBRUSHORGEX = ^EMRSETBRUSHORGEX;
{$EXTERNALSYM PEMRSETBRUSHORGEX}
TEmrSetViewPortOrgEx = EMRSETVIEWPORTORGEX;

PEmrSetViewPortExtEx = ^TEmrSetViewPortExtEx;
tagEMRSETVIEWPORTEXTEX = record
emr: EMR;
szlExtent: SIZEL;
end;
{$EXTERNALSYM tagEMRSETVIEWPORTEXTEX}
EMRSETVIEWPORTEXTEX = tagEMRSETVIEWPORTEXTEX;
{$EXTERNALSYM EMRSETVIEWPORTEXTEX}
EMRSETWINDOWEXTEX = tagEMRSETVIEWPORTEXTEX;
{$EXTERNALSYM EMRSETWINDOWEXTEX}
TEmrSetViewPortExtEx = EMRSETVIEWPORTEXTEX;

PEmrScaleViewPortExtEx = ^TEmrScaleViewPortExtEx;
tagEMRSCALEVIEWPORTEXTEX = record
emr: EMR;
xNum: LONG;
xDenom: LONG;
yNum: LONG;
yDenom: LONG;
end;
{$EXTERNALSYM tagEMRSCALEVIEWPORTEXTEX}
EMRSCALEVIEWPORTEXTEX = tagEMRSCALEVIEWPORTEXTEX;
{$EXTERNALSYM EMRSCALEVIEWPORTEXTEX}
EMRSCALEWINDOWEXTEX = tagEMRSCALEVIEWPORTEXTEX;


{$EXTERNALSYM EMRSCALEWINDOWEXTEX}
PEMRSCALEWINDOWEXTEX = ^EMRSCALEWINDOWEXTEX;
{$EXTERNALSYM PEMRSCALEWINDOWEXTEX}
TEmrScaleViewPortExtEx = EMRSCALEVIEWPORTEXTEX;

PEmrSetWorldTransform = ^TEmrSetWorldTransform;
tagEMRSETWORLDTRANSFORM = record
emr: EMR;
xform: XFORM;
end;
{$EXTERNALSYM tagEMRSETWORLDTRANSFORM}
EMRSETWORLDTRANSFORM = tagEMRSETWORLDTRANSFORM;
{$EXTERNALSYM EMRSETWORLDTRANSFORM}
TEmrSetWorldTransform = EMRSETWORLDTRANSFORM;

PEmrModifyWorldTransform = ^TEmrModifyWorldTransform;
tagEMRMODIFYWORLDTRANSFORM = record
emr: EMR;
xform: XFORM;
iMode: DWORD;
end;
{$EXTERNALSYM tagEMRMODIFYWORLDTRANSFORM}
EMRMODIFYWORLDTRANSFORM = tagEMRMODIFYWORLDTRANSFORM;
{$EXTERNALSYM EMRMODIFYWORLDTRANSFORM}
TEmrModifyWorldTransform = EMRMODIFYWORLDTRANSFORM;

PEmrSetPixelV = ^TEmrSetPixelV;
tagEMRSETPIXELV = record
emr: EMR;
ptlPixel: POINTL;
crColor: COLORREF;
end;
{$EXTERNALSYM tagEMRSETPIXELV}
EMRSETPIXELV = tagEMRSETPIXELV;
{$EXTERNALSYM EMRSETPIXELV}
TEmrSetPixelV = EMRSETPIXELV;

PEmrExtFloodFill = ^TEmrExtFloodFill;
tagEMREXTFLOODFILL = record
emr: EMR;
ptlStart: POINTL;
crColor: COLORREF;
iMode: DWORD;
end;
{$EXTERNALSYM tagEMREXTFLOODFILL}
EMREXTFLOODFILL = tagEMREXTFLOODFILL;
{$EXTERNALSYM EMREXTFLOODFILL}
TEmrExtFloodFill = EMREXTFLOODFILL;

PEmrEllipse = ^TEmrEllipse;
tagEMRELLIPSE = record
emr: EMR;
rclBox: RECTL; // Inclusive-inclusive bounding rectangle
end;
{$EXTERNALSYM tagEMRELLIPSE}
EMRELLIPSE = tagEMRELLIPSE;
{$EXTERNALSYM EMRELLIPSE}
EMRRECTANGLE = tagEMRELLIPSE;
{$EXTERNALSYM EMRRECTANGLE}
PEMRRECTANGLE = ^EMRRECTANGLE;
{$EXTERNALSYM PEMRRECTANGLE}
TEmrEllipse = EMRELLIPSE;

PEmrRoundRect = ^TEmrRoundRect;
tagEMRROUNDRECT = record
emr: EMR;
rclBox: RECTL; // Inclusive-inclusive bounding rectangle

szlCorner: SIZEL;
end;
{$EXTERNALSYM tagEMRROUNDRECT}
EMRROUNDRECT = tagEMRROUNDRECT;
{$EXTERNALSYM EMRROUNDRECT}
TEmrRoundRect = EMRROUNDRECT;

PEmrArc = ^TEmrArc;
tagEMRARC = record
emr: EMR;
rclBox: RECTL; // Inclusive-inclusive bounding rectangle
ptlStart: POINTL;
ptlEnd: POINTL;
end;
{$EXTERNALSYM tagEMRARC}
EMRARC = tagEMRARC;
{$EXTERNALSYM EMRARC}
EMRARCTO = tagEMRARC;
{$EXTERNALSYM EMRARCTO}
PEMRARCTO = ^EMRARCTO;
{$EXTERNALSYM PEMRARCTO}
EMRCHORD = tagEMRARC;
{$EXTERNALSYM EMRCHORD}
PEMRCHORD = ^EMRCHORD;
{$EXTERNALSYM PEMRCHORD}
EMRPIE = tagEMRARC;
{$EXTERNALSYM EMRPIE}
PEMRPIE = ^EMRPIE;
{$EXTERNALSYM PEMRPIE}
TEmrArc = EMRARC;

PEmrAngleArc = ^TEmrAngleArc;
tagEMRANGLEARC = record
emr: EMR;
ptlCenter: POINTL;
nRadius: DWORD;
eStartAngle: FLOAT;
eSweepAngle: FLOAT;
end;
{$EXTERNALSYM tagEMRANGLEARC}
EMRANGLEARC = tagEMRANGLEARC;
{$EXTERNALSYM EMRANGLEARC}
TEmrAngleArc = EMRANGLEARC;

PEmrPolyline = ^TEmrPolyline;
tagEMRPOLYLINE = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
cptl: DWORD;
aptl: array [0..0] of POINTL;
end;
{$EXTERNALSYM tagEMRPOLYLINE}
EMRPOLYLINE = tagEMRPOLYLINE;
{$EXTERNALSYM EMRPOLYLINE}
EMRPOLYBEZIER = tagEMRPOLYLINE;
{$EXTERNALSYM EMRPOLYBEZIER}
PEMRPOLYBEZIER = ^EMRPOLYBEZIER;
{$EXTERNALSYM PEMRPOLYBEZIER}
EMRPOLYGON = tagEMRPOLYLINE;
{$EXTERNALSYM EMRPOLYGON}
PEMRPOLYGON = ^EMRPOLYGON;
{$EXTERNALSYM PEMRPOLYGON}
EMRPOLYBEZIERTO = tagEMRPOLYLINE;
{$EXTERNALSYM EMRPOLYBEZIERTO}
PEMRPOLYBEZIERTO = ^EMRPOLYBEZIERTO;
{$EXTERNALSYM PEMRPOLYBEZIERTO}
EMRPOLYLINETO = tagEMRPOLYLINE;
{$EXTERNALSYM EMRPOLYLINETO}
PEMRPOLYLINETO = ^EMRPOLYLINETO;
{$EXTERNALSYM PEMRPOLYLINETO}
TEmrPolyline = EMRPOLYLINE;

PEmrPolyline16 = ^TEmrPolyline16;
tagEMRPOLYLINE16 = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
cpts: DWORD;
apts: array [0..0] of POINTS;
end;
{$EXTERNALSYM tagEMRPOLYLINE16}
EMRPOLYLINE16 = tagEMRPOLYLINE16;
{$EXTERNALSYM EMRPOLYLINE16}
EMRPOLYBEZIER16 = tagEMRPOLYLINE16;
{$EXTERNALSYM EMRPOLYBEZIER16}
PEMRPOLYBEZIER16 = ^EMRPOLYBEZIER16;
{$EXTERNALSYM PEMRPOLYBEZIER16}
EMRPOLYGON16 = tagEMRPOLYLINE16;
{$EXTERNALSYM EMRPOLYGON16}
PEMRPOLYGON16 = ^EMRPOLYGON16;
{$EXTERNALSYM PEMRPOLYGON16}
EMRPOLYBEZIERTO16 = tagEMRPOLYLINE16;
{$EXTERNALSYM EMRPOLYBEZIERTO16}
PEMRPOLYBEZIERTO16 = ^EMRPOLYBEZIERTO16;
{$EXTERNALSYM PEMRPOLYBEZIERTO16}
EMRPOLYLINETO16 = tagEMRPOLYLINE16;
{$EXTERNALSYM EMRPOLYLINETO16}
PEMRPOLYLINETO16 = ^EMRPOLYLINETO16;
{$EXTERNALSYM PEMRPOLYLINETO16}
TEmrPolyline16 = EMRPOLYLINE16;

PEmrPolyDraw = ^TEmrPolyDraw;
tagEMRPOLYDRAW = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
cptl: DWORD; // Number of points
aptl: array [0..0] of POINTL; // Array of points
abTypes: array [0..0] of BYTE; // Array of point types
end;
{$EXTERNALSYM tagEMRPOLYDRAW}
EMRPOLYDRAW = tagEMRPOLYDRAW;
{$EXTERNALSYM EMRPOLYDRAW}
TEmrPolyDraw = EMRPOLYDRAW;

PEmrPolyDraw16 = ^TEmrPolyDraw16;
tagEMRPOLYDRAW16 = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
cpts: DWORD; // Number of points
apts: array [0..0] of POINTS; // Array of points
abTypes: array [0..0] of BYTE; // Array of point types
end;
{$EXTERNALSYM tagEMRPOLYDRAW16}
EMRPOLYDRAW16 = tagEMRPOLYDRAW16;
{$EXTERNALSYM EMRPOLYDRAW16}
TEmrPolyDraw16 = EMRPOLYDRAW16;

PEmrPolyPolyline = ^TEmrPolyPolyline;
tagEMRPOLYPOLYLINE = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
nPolys: DWORD; // Number of polys
cptl: DWORD; // Total number of points in all polys
aPolyCounts: array [0..0] of DWORD; // Array of point counts for each poly
aptl: array [0..0] of POINTL; // Array of points
end;
{$EXTERNALSYM tagEMRPOLYPOLYLINE}
EMRPOLYPOLYLINE = tagEMRPOLYPOLYLINE;
{$EXTERNALSYM EMRPOLYPOLYLINE}
EMRPOLYPOLYGON = tagEMRPOLYPOLYLINE;
{$EXTERNALSYM EMRPOLYPOLYGON}
TEmrPolyPolyline = EMRPOLYPOLYLINE;

PEmrPolyPolyline16 = ^TEmrPolyPolyline16;
tagEMRPOLYPOLYLINE16 = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
nPolys: DWORD; // Number of polys
cpts: DWORD; // Total number of points in all polys
aPolyCounts: array [0..0] of DWORD; // Array of point counts for each poly
apts: array [0..0] of POINTS; // Array of points
end;
{$EXTERNALSYM tagEMRPOLYPOLYLINE16}
EMRPOLYPOLYLINE16 = tagEMRPOLYPOLYLINE16;
{$EXTERNALSYM EMRPOLYPOLYLINE16}
EMRPOLYPOLYGON16 = tagEMRPOLYPOLYLINE16;
{$EXTERNALSYM EMRPOLYPOLYGON16}
PEMRPOLYPOLYGON16 = ^EMRPOLYPOLYGON16;
{$EXTERNALSYM PEMRPOLYPOLYGON16}
TEmrPolyPolyline16 = EMRPOLYPOLYLINE16;

PEmrInvertRgn = ^TEmrInvertRgn;
tagEMRINVERTRGN = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
cbRgnData: DWORD; // Size of region data in bytes
RgnData: array [0..0] of BYTE;
end;
{$EXTERNALSYM tagEMRINVERTRGN}
EMRINVERTRGN = tagEMRINVERTRGN;
{$EXTERNALSYM EMRINVERTRGN}
EMRPAINTRGN = tagEMRINVERTRGN;
{$EXTERNALSYM EMRPAINTRGN}
TEmrInvertRgn = EMRINVERTRGN;

PEmrFillRgn = ^TEmrFillRgn;
tagEMRFILLRGN = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
cbRgnData: DWORD; // Size of region data in bytes
ihBrush: DWORD; // Brush handle index
RgnData: array [0..0] of BYTE;
end;
{$EXTERNALSYM tagEMRFILLRGN}
EMRFILLRGN = tagEMRFILLRGN;

{$EXTERNALSYM EMRFILLRGN}
TEmrFillRgn = EMRFILLRGN;

PEmrFrameRgn = ^TEmrFrameRgn;
tagEMRFRAMERGN = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
cbRgnData: DWORD; // Size of region data in bytes
ihBrush: DWORD; // Brush handle index
szlStroke: SIZEL;
RgnData: array [0..0] of BYTE;
end;
{$EXTERNALSYM tagEMRFRAMERGN}
EMRFRAMERGN = tagEMRFRAMERGN;
{$EXTERNALSYM EMRFRAMERGN}
TEmrFrameRgn = EMRFRAMERGN;

PEmrExtSelectClipRgn = ^TEmrExtSelectClipRgn;
tagEMREXTSELECTCLIPRGN = record
emr: EMR;
cbRgnData: DWORD; // Size of region data in bytes
iMode: DWORD;
RgnData: array [0..0] of BYTE;
end;
{$EXTERNALSYM tagEMREXTSELECTCLIPRGN}
EMREXTSELECTCLIPRGN = tagEMREXTSELECTCLIPRGN;
{$EXTERNALSYM EMREXTSELECTCLIPRGN}
TEmrExtSelectClipRgn = EMREXTSELECTCLIPRGN;

PEmrExtTextOutA = ^TEmrExtTextOutA;
tagEMREXTTEXTOUTA = record
emr: EMR;


rclBounds: RECTL; // Inclusive-inclusive bounds in device units
iGraphicsMode: DWORD; // Current graphics mode
exScale: FLOAT; // X and Y scales from Page units to .01mm units
eyScale: FLOAT; // if graphics mode is GM_COMPATIBLE.
emrtext: EMRTEXT; // This is followed by the string and spacing array
end;
{$EXTERNALSYM tagEMREXTTEXTOUTA}
EMREXTTEXTOUTA = tagEMREXTTEXTOUTA;
{$EXTERNALSYM EMREXTTEXTOUTA}
EMREXTTEXTOUTW = tagEMREXTTEXTOUTA;
{$EXTERNALSYM EMREXTTEXTOUTW}
PEMREXTTEXTOUTW = ^EMREXTTEXTOUTW;
{$EXTERNALSYM PEMREXTTEXTOUTW}
TEmrExtTextOutA = EMREXTTEXTOUTA;

PEmrPolyTextOutA = ^TEmrPolyTextOutA;
tagEMRPOLYTEXTOUTA = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
iGraphicsMode: DWORD; // Current graphics mode
exScale: FLOAT; // X and Y scales from Page units to .01mm units
eyScale: FLOAT; // if graphics mode is GM_COMPATIBLE.


cStrings: LONG;
aemrtext: array [0..0] of EMRTEXT; // Array of EMRTEXT structures. This is
// followed by the strings and spacing arrays.
end;
{$EXTERNALSYM tagEMRPOLYTEXTOUTA}
EMRPOLYTEXTOUTA = tagEMRPOLYTEXTOUTA;
{$EXTERNALSYM EMRPOLYTEXTOUTA}
EMRPOLYTEXTOUTW = tagEMRPOLYTEXTOUTA;
{$EXTERNALSYM EMRPOLYTEXTOUTW}
PEMRPOLYTEXTOUTW = ^EMRPOLYTEXTOUTW;
{$EXTERNALSYM PEMRPOLYTEXTOUTW}
TEmrPolyTextOutA = EMRPOLYTEXTOUTA;

PEmrBitBlt = ^TEmrBitBlt;
tagEMRBITBLT = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
xDest: LONG;
yDest: LONG;
cxDest: LONG;
cyDest: LONG;
dwRop: DWORD;
xSrc: LONG;
ySrc: LONG;
xformSrc: XFORM; // Source DC transform
crBkColorSrc: COLORREF; // Source DC BkColor in RGB
iUsageSrc: DWORD; // Source bitmap info color table usage
// (DIB_RGB_COLORS)
offBmiSrc: DWORD; // Offset to the source BITMAPINFO structure
cbBmiSrc: DWORD; // Size of the source BITMAPINFO structure
offBitsSrc: DWORD; // Offset to the source bitmap bits
cbBitsSrc: DWORD; // Size of the source bitmap bits
end;
{$EXTERNALSYM tagEMRBITBLT}
EMRBITBLT = tagEMRBITBLT;
{$EXTERNALSYM EMRBITBLT}
TEmrBitBlt = EMRBITBLT;

PEmrStretchBlt = ^TEmrStretchBlt;
tagEMRSTRETCHBLT = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
xDest: LONG;
yDest: LONG;
cxDest: LONG;
cyDest: LONG;
dwRop: DWORD;
xSrc: LONG;
ySrc: LONG;
xformSrc: XFORM; // Source DC transform
crBkColorSrc: COLORREF; // Source DC BkColor in RGB
iUsageSrc: DWORD; // Source bitmap info color table usage
// (DIB_RGB_COLORS)
offBmiSrc: DWORD; // Offset to the source BITMAPINFO structure
cbBmiSrc: DWORD; // Size of the source BITMAPINFO structure
offBitsSrc: DWORD; // Offset to the source bitmap bits
cbBitsSrc: DWORD; // Size of the source bitmap bits


cxSrc: LONG;
cySrc: LONG;
end;
{$EXTERNALSYM tagEMRSTRETCHBLT}
EMRSTRETCHBLT = tagEMRSTRETCHBLT;
{$EXTERNALSYM EMRSTRETCHBLT}
TEmrStretchBlt = EMRSTRETCHBLT;

PEmrMaskBlt = ^TEmrMaskBlt;
tagEMRMASKBLT = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
xDest: LONG;
yDest: LONG;
cxDest: LONG;
cyDest: LONG;
dwRop: DWORD;
xSrc: LONG;
ySrc: LONG;
xformSrc: XFORM; // Source DC transform
crBkColorSrc: COLORREF; // Source DC BkColor in RGB
iUsageSrc: DWORD; // Source bitmap info color table usage
// (DIB_RGB_COLORS)
offBmiSrc: DWORD; // Offset to the source BITMAPINFO structure
cbBmiSrc: DWORD; // Size of the source BITMAPINFO structure
offBitsSrc: DWORD; // Offset to the source bitmap bits
cbBitsSrc: DWORD; // Size of the source bitmap bits
xMask: LONG;
yMask: LONG;
iUsageMask: DWORD; // Mask bitmap info color table usage
offBmiMask: DWORD; // Offset to the mask BITMAPINFO structure if any
cbBmiMask: DWORD; // Size of the mask BITMAPINFO structure if any
offBitsMask: DWORD; // Offset to the mask bitmap bits if any
cbBitsMask: DWORD; // Size of the mask bitmap bits if any
end;
{$EXTERNALSYM tagEMRMASKBLT}
EMRMASKBLT = tagEMRMASKBLT;
{$EXTERNALSYM EMRMASKBLT}
TEmrMaskBlt = EMRMASKBLT;

PEmrPlgBlt = ^TEmrPlgBlt;
tagEMRPLGBLT = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
aptlDest: array[0..2] of POINTL;
xSrc: LONG;
ySrc: LONG;
cxSrc: LONG;
cySrc: LONG;
xformSrc: XFORM; // Source DC transform
crBkColorSrc: COLORREF; // Source DC BkColor in RGB
iUsageSrc: DWORD; // Source bitmap info color table usage
// (DIB_RGB_COLORS)
offBmiSrc: DWORD; // Offset to the source BITMAPINFO structure
cbBmiSrc: DWORD; // Size of the source BITMAPINFO structure
offBitsSrc: DWORD; // Offset to the source bitmap bits
cbBitsSrc: DWORD; // Size of the source bitmap bits
xMask: LONG;
yMask: LONG;
iUsageMask: DWORD; // Mask bitmap info color table usage
offBmiMask: DWORD; // Offset to the mask BITMAPINFO structure if any
cbBmiMask: DWORD; // Size of the mask BITMAPINFO structure if any
offBitsMask: DWORD; // Offset to the mask bitmap bits if any
cbBitsMask: DWORD; // Size of the mask bitmap bits if any
end;
{$EXTERNALSYM tagEMRPLGBLT}
EMRPLGBLT = tagEMRPLGBLT;
{$EXTERNALSYM EMRPLGBLT}
TEmrPlgBlt = EMRPLGBLT;

PEmrSetDiBitsToDevice = ^TEmrSetDiBitsToDevice;
tagEMRSETDIBITSTODEVICE = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
xDest: LONG;
yDest: LONG;
xSrc: LONG;
ySrc: LONG;
cxSrc: LONG;
cySrc: LONG;
offBmiSrc: DWORD; // Offset to the source BITMAPINFO structure
cbBmiSrc: DWORD; // Size of the source BITMAPINFO structure
offBitsSrc: DWORD; // Offset to the source bitmap bits
cbBitsSrc: DWORD; // Size of the source bitmap bits
iUsageSrc: DWORD; // Source bitmap info color table usage
iStartScan: DWORD;
cScans: DWORD;
end;
{$EXTERNALSYM tagEMRSETDIBITSTODEVICE}
EMRSETDIBITSTODEVICE = tagEMRSETDIBITSTODEVICE;
{$EXTERNALSYM EMRSETDIBITSTODEVICE}
TEmrSetDiBitsToDevice = EMRSETDIBITSTODEVICE;

PEmrStretchDiBits = ^TEmrStretchDiBits;
tagEMRSTRETCHDIBITS = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
xDest: LONG;
yDest: LONG;
xSrc: LONG;
ySrc: LONG;
cxSrc: LONG;
cySrc: LONG;
offBmiSrc: DWORD; // Offset to the source BITMAPINFO structure
cbBmiSrc: DWORD; // Size of the source BITMAPINFO structure
offBitsSrc: DWORD; // Offset to the source bitmap bits
cbBitsSrc: DWORD; // Size of the source bitmap bits
iUsageSrc: DWORD; // Source bitmap info color table usage
dwRop: DWORD;
cxDest: LONG;


cyDest: LONG;
end;
{$EXTERNALSYM tagEMRSTRETCHDIBITS}
EMRSTRETCHDIBITS = tagEMRSTRETCHDIBITS;
{$EXTERNALSYM EMRSTRETCHDIBITS}
TEmrStretchDiBits = EMRSTRETCHDIBITS;

PEmrExtCreateFontIndirectW = ^TEmrExtCreateFontIndirectW;
tagEMREXTCREATEFONTINDIRECTW = record
emr: EMR;
ihFont: DWORD; // Font handle index
elfw: EXTLOGFONTW;
end;
{$EXTERNALSYM tagEMREXTCREATEFONTINDIRECTW}
EMREXTCREATEFONTINDIRECTW = tagEMREXTCREATEFONTINDIRECTW;
{$EXTERNALSYM EMREXTCREATEFONTINDIRECTW}
TEmrExtCreateFontIndirectW = EMREXTCREATEFONTINDIRECTW;

PEmrCreatePalette = ^TEmrCreatePalette;
tagEMRCREATEPALETTE = record
emr: EMR;
ihPal: DWORD; // Palette handle index
lgpl: LOGPALETTE; // The peFlags fields in the palette entries
// do not contain any flags
end;
{$EXTERNALSYM tagEMRCREATEPALETTE}
EMRCREATEPALETTE = tagEMRCREATEPALETTE;
{$EXTERNALSYM EMRCREATEPALETTE}
TEmrCreatePalette = EMRCREATEPALETTE;



PEmrCreatePen = ^TEmrCreatePen;
tagEMRCREATEPEN = record
emr: EMR;
ihPen: DWORD; // Pen handle index
lopn: LOGPEN;
end;
{$EXTERNALSYM tagEMRCREATEPEN}
EMRCREATEPEN = tagEMRCREATEPEN;
{$EXTERNALSYM EMRCREATEPEN}
TEmrCreatePen = EMRCREATEPEN;

PEmrExtCreatePen = ^TEmrExtCreatePen;
tagEMREXTCREATEPEN = record
emr: EMR;
ihPen: DWORD; // Pen handle index
offBmi: DWORD; // Offset to the BITMAPINFO structure if any
cbBmi: DWORD; // Size of the BITMAPINFO structure if any
// The bitmap info is followed by the bitmap
// bits to form a packed DIB.
offBits: DWORD; // Offset to the brush bitmap bits if any
cbBits: DWORD; // Size of the brush bitmap bits if any
elp: EXTLOGPEN; // The extended pen with the style array.
end;
{$EXTERNALSYM tagEMREXTCREATEPEN}
EMREXTCREATEPEN = tagEMREXTCREATEPEN;
{$EXTERNALSYM EMREXTCREATEPEN}
TEmrExtCreatePen = EMREXTCREATEPEN;

PEmrCreateBrushIndirect = ^TEmrCreateBrushIndirect;
tagEMRCREATEBRUSHINDIRECT = record
emr: EMR;
ihBrush: DWORD; // Brush handle index
lb: LOGBRUSH32; // The style must be BS_SOLID, BS_HOLLOW,
// BS_NULL or BS_HATCHED.
end;
{$EXTERNALSYM tagEMRCREATEBRUSHINDIRECT}
EMRCREATEBRUSHINDIRECT = tagEMRCREATEBRUSHINDIRECT;
{$EXTERNALSYM EMRCREATEBRUSHINDIRECT}
TEmrCreateBrushIndirect = EMRCREATEBRUSHINDIRECT;

PEmrCreateMonoBrush = ^TEmrCreateMonoBrush;
tagEMRCREATEMONOBRUSH = record
emr: EMR;
ihBrush: DWORD; // Brush handle index
iUsage: DWORD; // Bitmap info color table usage
offBmi: DWORD; // Offset to the BITMAPINFO structure
cbBmi: DWORD; // Size of the BITMAPINFO structure
offBits: DWORD; // Offset to the bitmap bits
cbBits: DWORD; // Size of the bitmap bits
end;
{$EXTERNALSYM tagEMRCREATEMONOBRUSH}
EMRCREATEMONOBRUSH = tagEMRCREATEMONOBRUSH;
{$EXTERNALSYM EMRCREATEMONOBRUSH}
TEmrCreateMonoBrush = EMRCREATEMONOBRUSH;

PEmrCreateDibPatternBrushPt = ^TEmrCreateDibPatternBrushPt;
tagEMRCREATEDIBPATTERNBRUSHPT = record
emr: EMR;
ihBrush: DWORD; // Brush handle index
iUsage: DWORD; // Bitmap info color table usage
offBmi: DWORD; // Offset to the BITMAPINFO structure
cbBmi: DWORD; // Size of the BITMAPINFO structure
// The bitmap info is followed by the bitmap
// bits to form a packed DIB.
offBits: DWORD; // Offset to the bitmap bits
cbBits: DWORD; // Size of the bitmap bits
end;
{$EXTERNALSYM tagEMRCREATEDIBPATTERNBRUSHPT}
EMRCREATEDIBPATTERNBRUSHPT = tagEMRCREATEDIBPATTERNBRUSHPT;
{$EXTERNALSYM EMRCREATEDIBPATTERNBRUSHPT}
TEmrCreateDibPatternBrushPt = EMRCREATEDIBPATTERNBRUSHPT;

PEmrFormat = ^TEmrFormat;
tagEMRFORMAT = record
dSignature: DWORD; // Format signature, e.g. ENHMETA_SIGNATURE.
nVersion: DWORD; // Format version number.
cbData: DWORD; // Size of data in bytes.
offData: DWORD; // Offset to data from GDICOMMENT_IDENTIFIER.


// It must begin at a DWORD offset.
end;
{$EXTERNALSYM tagEMRFORMAT}
EMRFORMAT = tagEMRFORMAT;
{$EXTERNALSYM EMRFORMAT}
TEmrFormat = EMRFORMAT;

PEmrGlsRecord = ^TEmrGlsRecord;
tagEMRGLSRECORD = record
emr: EMR;
cbData: DWORD; // Size of data in bytes
Data: array [0..0] of BYTE;
end;
{$EXTERNALSYM tagEMRGLSRECORD}
EMRGLSRECORD = tagEMRGLSRECORD;
{$EXTERNALSYM EMRGLSRECORD}
TEmrGlsRecord = EMRGLSRECORD;

PEmrGlsBoundedRecord = ^TEmrGlsBoundedRecord;
tagEMRGLSBOUNDEDRECORD = record
emr: EMR;
rclBounds: RECTL; // Bounds in recording coordinates
cbData: DWORD; // Size of data in bytes
Data: array [0..0] of BYTE;
end;
{$EXTERNALSYM tagEMRGLSBOUNDEDRECORD}
EMRGLSBOUNDEDRECORD = tagEMRGLSBOUNDEDRECORD;
{$EXTERNALSYM EMRGLSBOUNDEDRECORD}
TEmrGlsBoundedRecord = EMRGLSBOUNDEDRECORD;

PEmrPixelFormat = ^TEmrPixelFormat;
tagEMRPIXELFORMAT = record
emr: EMR;
pfd: PIXELFORMATDESCRIPTOR;
end;
{$EXTERNALSYM tagEMRPIXELFORMAT}
EMRPIXELFORMAT = tagEMRPIXELFORMAT;
{$EXTERNALSYM EMRPIXELFORMAT}
TEmrPixelFormat = EMRPIXELFORMAT;

PEmrCreateColorSpace = ^TEmrCreateColorSpace;
tagEMRCREATECOLORSPACE = record
emr: EMR;
ihCS: DWORD; // ColorSpace handle index
lcs: LOGCOLORSPACEA; // Ansi version of LOGCOLORSPACE
end;
{$EXTERNALSYM tagEMRCREATECOLORSPACE}
EMRCREATECOLORSPACE = tagEMRCREATECOLORSPACE;
{$EXTERNALSYM EMRCREATECOLORSPACE}
TEmrCreateColorSpace = EMRCREATECOLORSPACE;

PEmrSetColorSpace = ^TEmrSetColorSpace;
tagEMRSETCOLORSPACE = record
emr: EMR;
ihCS: DWORD; // ColorSpace handle index
end;
{$EXTERNALSYM tagEMRSETCOLORSPACE}
EMRSETCOLORSPACE = tagEMRSETCOLORSPACE;
{$EXTERNALSYM EMRSETCOLORSPACE}
EMRSELECTCOLORSPACE = tagEMRSETCOLORSPACE;
{$EXTERNALSYM EMRSELECTCOLORSPACE}
PEMRSELECTCOLORSPACE = ^EMRSELECTCOLORSPACE;
{$EXTERNALSYM PEMRSELECTCOLORSPACE}
EMRDELETECOLORSPACE = tagEMRSETCOLORSPACE;
{$EXTERNALSYM EMRDELETECOLORSPACE}
PEMRDELETECOLORSPACE = ^EMRDELETECOLORSPACE;
{$EXTERNALSYM PEMRDELETECOLORSPACE}
TEmrSetColorSpace = EMRSETCOLORSPACE;

PEmrExtEscape = ^TEmrExtEscape;
tagEMREXTESCAPE = record
emr: EMR;
iEscape: INT; // Escape code
cbEscData: INT; // Size of escape data
EscData: array [0..0] of BYTE; // Escape data
end;
{$EXTERNALSYM tagEMREXTESCAPE}
EMREXTESCAPE = tagEMREXTESCAPE;
{$EXTERNALSYM EMREXTESCAPE}
EMRDRAWESCAPE = tagEMREXTESCAPE;
{$EXTERNALSYM EMRDRAWESCAPE}
PEMRDRAWESCAPE = ^EMRDRAWESCAPE;
{$EXTERNALSYM PEMRDRAWESCAPE}
TEmrExtEscape = EMREXTESCAPE;

PEmrNamedEscape = ^TEmrNamedEscape;
tagEMRNAMEDESCAPE = record
emr: EMR;
iEscape: INT; // Escape code
cbDriver: INT; // Size of driver name
cbEscData: INT; // Size of escape data
EscData: array [0..0] of BYTE; // Driver name and Escape data
end;
{$EXTERNALSYM tagEMRNAMEDESCAPE}
EMRNAMEDESCAPE = tagEMRNAMEDESCAPE;
{$EXTERNALSYM EMRNAMEDESCAPE}
TEmrNamedEscape = EMRNAMEDESCAPE;

const
SETICMPROFILE_EMBEDED = $00000001;
{$EXTERNALSYM SETICMPROFILE_EMBEDED}

type
PEmrSetIcmProfile = ^TEmrSetIcmProfile;
tagEMRSETICMPROFILE = record
emr: EMR;
dwFlags: DWORD; // flags
cbName: DWORD; // Size of desired profile name
cbData: DWORD; // Size of raw profile data if attached
Data: array [0..0] of BYTE; // Array size is cbName + cbData
end;
{$EXTERNALSYM tagEMRSETICMPROFILE}
EMRSETICMPROFILE = tagEMRSETICMPROFILE;
{$EXTERNALSYM EMRSETICMPROFILE}
EMRSETICMPROFILEA = tagEMRSETICMPROFILE;
{$EXTERNALSYM EMRSETICMPROFILEA}
PEMRSETICMPROFILEA = ^EMRSETICMPROFILEA;
{$EXTERNALSYM PEMRSETICMPROFILEA}
EMRSETICMPROFILEW = tagEMRSETICMPROFILE;
{$EXTERNALSYM EMRSETICMPROFILEW}
PEMRSETICMPROFILEW = ^EMRSETICMPROFILEW;
{$EXTERNALSYM PEMRSETICMPROFILEW}
TEmrSetIcmProfile = EMRSETICMPROFILE;

const
CREATECOLORSPACE_EMBEDED = $00000001;
{$EXTERNALSYM CREATECOLORSPACE_EMBEDED}

type
PEmrCreateColorSpaceW = ^TEmrCreateColorSpaceW;
tagEMRCREATECOLORSPACEW = record
emr: EMR;
ihCS: DWORD; // ColorSpace handle index
lcs: LOGCOLORSPACEW; // Unicode version of logical color space structure
dwFlags: DWORD; // flags
cbData: DWORD; // size of raw source profile data if attached
Data: array [0..0] of BYTE; // Array size is cbData
end;
{$EXTERNALSYM tagEMRCREATECOLORSPACEW}
EMRCREATECOLORSPACEW = tagEMRCREATECOLORSPACEW;
{$EXTERNALSYM EMRCREATECOLORSPACEW}
TEmrCreateColorSpaceW = EMRCREATECOLORSPACEW;

const
COLORMATCHTOTARGET_EMBEDED = $00000001;
{$EXTERNALSYM COLORMATCHTOTARGET_EMBEDED}

type
PColorMatchToTarget = ^TColorMatchToTarget;
tagCOLORMATCHTOTARGET = record
emr: EMR;
dwAction: DWORD; // CS_ENABLE, CS_DISABLE or CS_DELETE_TRANSFORM
dwFlags: DWORD; // flags
cbName: DWORD; // Size of desired target profile name
cbData: DWORD; // Size of raw target profile data if attached
Data: array [0..0] of BYTE; // Array size is cbName + cbData
end;
{$EXTERNALSYM tagCOLORMATCHTOTARGET}
//COLORMATCHTOTARGET = tagCOLORMATCHTOTARGET;
//{$EXTERNALSYM COLORMATCHTOTARGET}
TColorMatchToTarget = tagCOLORMATCHTOTARGET;

PColorCorrectPalette = ^TColorCorrectPalette;
tagCOLORCORRECTPALETTE = record
emr: EMR;
ihPalette: DWORD; // Palette handle index
nFirstEntry: DWORD; // Index of first entry to correct
nPalEntries: DWORD; // Number of palette entries to correct
nReserved: DWORD; // Reserved
end;
{$EXTERNALSYM tagCOLORCORRECTPALETTE}
//COLORCORRECTPALETTE = tagCOLORCORRECTPALETTE;
//{$EXTERNALSYM COLORCORRECTPALETTE}
TColorCorrectPalette = tagCOLORCORRECTPALETTE;

PEmrAlphaBlend = ^TEmrAlphaBlend;
tagEMRALPHABLEND = record

emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
xDest: LONG;
yDest: LONG;
cxDest: LONG;
cyDest: LONG;
dwRop: DWORD;
xSrc: LONG;
ySrc: LONG;
xformSrc: XFORM; // Source DC transform
crBkColorSrc: COLORREF; // Source DC BkColor in RGB
iUsageSrc: DWORD; // Source bitmap info color table usage (DIB_RGB_COLORS)
offBmiSrc: DWORD; // Offset to the source BITMAPINFO structure
cbBmiSrc: DWORD; // Size of the source BITMAPINFO structure
offBitsSrc: DWORD; // Offset to the source bitmap bits
cbBitsSrc: DWORD; // Size of the source bitmap bits
cxSrc: LONG;
cySrc: LONG;
end;
{$EXTERNALSYM tagEMRALPHABLEND}
EMRALPHABLEND = tagEMRALPHABLEND;
{$EXTERNALSYM EMRALPHABLEND}
TEmrAlphaBlend = EMRALPHABLEND;

PEmrGradientFill = ^TEmrGradientFill;
tagEMRGRADIENTFILL = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units

nVer: DWORD;
nTri: DWORD;
ulMode: ULONG;
Ver: array [0..0] of TRIVERTEX;
end;
{$EXTERNALSYM tagEMRGRADIENTFILL}
EMRGRADIENTFILL = tagEMRGRADIENTFILL;
{$EXTERNALSYM EMRGRADIENTFILL}
TEmrGradientFill = EMRGRADIENTFILL;

PEmrTransparentBlt = ^TEmrTransparentBlt;
tagEMRTRANSPARENTBLT = record
emr: EMR;
rclBounds: RECTL; // Inclusive-inclusive bounds in device units
xDest: LONG;
yDest: LONG;
cxDest: LONG;
cyDest: LONG;
dwRop: DWORD;
xSrc: LONG;
ySrc: LONG;
xformSrc: XFORM; // Source DC transform
crBkColorSrc: COLORREF; // Source DC BkColor in RGB
iUsageSrc: DWORD; // Source bitmap info color table usage
// (DIB_RGB_COLORS)
offBmiSrc: DWORD; // Offset to the source BITMAPINFO structure
cbBmiSrc: DWORD; // Size of the source BITMAPINFO structure
offBitsSrc: DWORD; // Offset to the source bitmap bits
cbBitsSrc: DWORD; // Size of the source bitmap bits
cxSrc: LONG;
cySrc: LONG;
end;
{$EXTERNALSYM tagEMRTRANSPARENTBLT}
EMRTRANSPARENTBLT = tagEMRTRANSPARENTBLT;
{$EXTERNALSYM EMRTRANSPARENTBLT}
TEmrTransparentBlt = EMRTRANSPARENTBLT;

const
GDICOMMENT_IDENTIFIER = $43494447;
{$EXTERNALSYM GDICOMMENT_IDENTIFIER}
GDICOMMENT_WINDOWS_METAFILE = DWORD($80000001);
{$EXTERNALSYM GDICOMMENT_WINDOWS_METAFILE}
GDICOMMENT_BEGINGROUP = $00000002;
{$EXTERNALSYM GDICOMMENT_BEGINGROUP}
GDICOMMENT_ENDGROUP = $00000003;
{$EXTERNALSYM GDICOMMENT_ENDGROUP}
GDICOMMENT_MULTIFORMATS = $40000004;
{$EXTERNALSYM GDICOMMENT_MULTIFORMATS}
EPS_SIGNATURE = $46535045;
{$EXTERNALSYM EPS_SIGNATURE}
GDICOMMENT_UNICODE_STRING = $00000040;
{$EXTERNALSYM GDICOMMENT_UNICODE_STRING}
GDICOMMENT_UNICODE_END = $00000080;
{$EXTERNALSYM GDICOMMENT_UNICODE_END}

// OpenGL wgl prototypes

function wglCopyContext(hglrcSrc, hglrcDest: HGLRC; mask: UINT): BOOL; stdcall;
{$EXTERNALSYM wglCopyContext}
function wglCreateContext(hdc: HDC): HGLRC; stdcall;
{$EXTERNALSYM wglCreateContext}
function wglCreateLayerContext(hdc: HDC; iLayerPlane: Integer): HGLRC; stdcall;
{$EXTERNALSYM wglCreateLayerContext}
function wglDeleteContext(hglrc: HGLRC): BOOL; stdcall;
{$EXTERNALSYM wglDeleteContext}
function wglGetCurrentContext: HGLRC; stdcall;
{$EXTERNALSYM wglGetCurrentContext}
function wglGetCurrentDC: HDC; stdcall;
{$EXTERNALSYM wglGetCurrentDC}
function wglGetProcAddress(lpszProc: LPCSTR): PROC; stdcall;
{$EXTERNALSYM wglGetProcAddress}
function wglMakeCurrent(hdc: HDC; hglrc: HGLRC): BOOL; stdcall;
{$EXTERNALSYM wglMakeCurrent}
function wglShareLists(hglrc1, hglrc2: HGLRC): BOOL; stdcall;
{$EXTERNALSYM wglShareLists}

function wglUseFontBitmapsA(hdc: HDC; first, count, listBase: DWORD): BOOL; stdcall;
{$EXTERNALSYM wglUseFontBitmapsA}
function wglUseFontBitmapsW(hdc: HDC; first, count, listBase: DWORD): BOOL; stdcall;

{$EXTERNALSYM wglUseFontBitmapsW}

{$IFDEF UNICODE}
function wglUseFontBitmaps(hdc: HDC; first, count, listBase: DWORD): BOOL; stdcall;
{$EXTERNALSYM wglUseFontBitmaps}
{$ELSE}
function wglUseFontBitmaps(hdc: HDC; first, count, listBase: DWORD): BOOL; stdcall;
{$EXTERNALSYM wglUseFontBitmaps}
{$ENDIF}

function SwapBuffers(hdc: HDC): BOOL; stdcall;
{$EXTERNALSYM SwapBuffers}

type
PPointFloat = ^TPointFloat;
_POINTFLOAT = record
x: FLOAT;
y: FLOAT;
end;
{$EXTERNALSYM _POINTFLOAT}
POINTFLOAT = _POINTFLOAT;
{$EXTERNALSYM POINTFLOAT}
TPointFloat = _POINTFLOAT;

PGlyphMetricsFloat = ^TGlyphMetricsFloat;
_GLYPHMETRICSFLOAT = record
gmfBlackBoxX: FLOAT;
gmfBlackBoxY: FLOAT;
gmfptGlyphOrigin: POINTFLOAT;
gmfCellIncX: FLOAT;
gmfCellIncY: FLOAT;
end;
{$EXTERNALSYM _GLYPHMETRICSFLOAT}
GLYPHMETRICSFLOAT = _GLYPHMETRICSFLOAT;
{$EXTERNALSYM GLYPHMETRICSFLOAT}
LPGLYPHMETRICSFLOAT = ^GLYPHMETRICSFLOAT;


{$EXTERNALSYM LPGLYPHMETRICSFLOAT}
TGlyphMetricsFloat = _GLYPHMETRICSFLOAT;

const
WGL_FONT_LINES = 0;
{$EXTERNALSYM WGL_FONT_LINES}
WGL_FONT_POLYGONS = 1;
{$EXTERNALSYM WGL_FONT_POLYGONS}

function wglUseFontOutlinesA(hdc: HDC; first, count, listBase: DWORD; deviation,
extrusion: FLOAT; format: Integer; lpgmf: LPGLYPHMETRICSFLOAT): BOOL; stdcall;
{$EXTERNALSYM wglUseFontOutlinesA}
function wglUseFontOutlinesW(hdc: HDC; first, count, listBase: DWORD; deviation,
extrusion: FLOAT; format: Integer; lpgmf: LPGLYPHMETRICSFLOAT): BOOL; stdcall;
{$EXTERNALSYM wglUseFontOutlinesW}

{$IFDEF UNICODE}
function wglUseFontOutlines(hdc: HDC; first, count, listBase: DWORD; deviation,
extrusion: FLOAT; format: Integer; lpgmf: LPGLYPHMETRICSFLOAT): BOOL; stdcall;
{$EXTERNALSYM wglUseFontOutlines}
{$ELSE}
function wglUseFontOutlines(hdc: HDC; first, count, listBase: DWORD; deviation,
extrusion: FLOAT; format: Integer; lpgmf: LPGLYPHMETRICSFLOAT): BOOL; stdcall;


{$EXTERNALSYM wglUseFontOutlines}
{$ENDIF}

// Layer plane descriptor

type
PLayerPlaneDescriptor = ^TLayerPlaneDescriptor;
tagLAYERPLANEDESCRIPTOR = record
nSize: WORD;
nVersion: WORD;
dwFlags: DWORD;
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: BYTE;
crTransparent: COLORREF;
end;
{$EXTERNALSYM tagLAYERPLANEDESCRIPTOR}
LAYERPLANEDESCRIPTOR = tagLAYERPLANEDESCRIPTOR;
{$EXTERNALSYM LAYERPLANEDESCRIPTOR}
LPLAYERPLANEDESCRIPTOR = ^LAYERPLANEDESCRIPTOR;
{$EXTERNALSYM LPLAYERPLANEDESCRIPTOR}
TLayerPlaneDescriptor = LAYERPLANEDESCRIPTOR;

// LAYERPLANEDESCRIPTOR flags

const
LPD_DOUBLEBUFFER = $00000001;
{$EXTERNALSYM LPD_DOUBLEBUFFER}
LPD_STEREO = $00000002;
{$EXTERNALSYM LPD_STEREO}
LPD_SUPPORT_GDI = $00000010;
{$EXTERNALSYM LPD_SUPPORT_GDI}
LPD_SUPPORT_OPENGL = $00000020;
{$EXTERNALSYM LPD_SUPPORT_OPENGL}
LPD_SHARE_DEPTH = $00000040;
{$EXTERNALSYM LPD_SHARE_DEPTH}
LPD_SHARE_STENCIL = $00000080;
{$EXTERNALSYM LPD_SHARE_STENCIL}
LPD_SHARE_ACCUM = $00000100;
{$EXTERNALSYM LPD_SHARE_ACCUM}
LPD_SWAP_EXCHANGE = $00000200;
{$EXTERNALSYM LPD_SWAP_EXCHANGE}
LPD_SWAP_COPY = $00000400;
{$EXTERNALSYM LPD_SWAP_COPY}
LPD_TRANSPARENT = $00001000;
{$EXTERNALSYM LPD_TRANSPARENT}

LPD_TYPE_RGBA = 0;
{$EXTERNALSYM LPD_TYPE_RGBA}
LPD_TYPE_COLORINDEX = 1;
{$EXTERNALSYM LPD_TYPE_COLORINDEX}

// wglSwapLayerBuffers flags

WGL_SWAP_MAIN_PLANE = $00000001;


{$EXTERNALSYM WGL_SWAP_MAIN_PLANE}
WGL_SWAP_OVERLAY1 = $00000002;
{$EXTERNALSYM WGL_SWAP_OVERLAY1}
WGL_SWAP_OVERLAY2 = $00000004;
{$EXTERNALSYM WGL_SWAP_OVERLAY2}
WGL_SWAP_OVERLAY3 = $00000008;
{$EXTERNALSYM WGL_SWAP_OVERLAY3}
WGL_SWAP_OVERLAY4 = $00000010;
{$EXTERNALSYM WGL_SWAP_OVERLAY4}
WGL_SWAP_OVERLAY5 = $00000020;
{$EXTERNALSYM WGL_SWAP_OVERLAY5}
WGL_SWAP_OVERLAY6 = $00000040;
{$EXTERNALSYM WGL_SWAP_OVERLAY6}
WGL_SWAP_OVERLAY7 = $00000080;
{$EXTERNALSYM WGL_SWAP_OVERLAY7}
WGL_SWAP_OVERLAY8 = $00000100;
{$EXTERNALSYM WGL_SWAP_OVERLAY8}
WGL_SWAP_OVERLAY9 = $00000200;
{$EXTERNALSYM WGL_SWAP_OVERLAY9}
WGL_SWAP_OVERLAY10 = $00000400;
{$EXTERNALSYM WGL_SWAP_OVERLAY10}
WGL_SWAP_OVERLAY11 = $00000800;
{$EXTERNALSYM WGL_SWAP_OVERLAY11}
WGL_SWAP_OVERLAY12 = $00001000;
{$EXTERNALSYM WGL_SWAP_OVERLAY12}
WGL_SWAP_OVERLAY13 = $00002000;
{$EXTERNALSYM WGL_SWAP_OVERLAY13}
WGL_SWAP_OVERLAY14 = $00004000;
{$EXTERNALSYM WGL_SWAP_OVERLAY14}
WGL_SWAP_OVERLAY15 = $00008000;
{$EXTERNALSYM WGL_SWAP_OVERLAY15}
WGL_SWAP_UNDERLAY1 = $00010000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY1}
WGL_SWAP_UNDERLAY2 = $00020000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY2}
WGL_SWAP_UNDERLAY3 = $00040000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY3}
WGL_SWAP_UNDERLAY4 = $00080000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY4}
WGL_SWAP_UNDERLAY5 = $00100000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY5}
WGL_SWAP_UNDERLAY6 = $00200000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY6}
WGL_SWAP_UNDERLAY7 = $00400000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY7}
WGL_SWAP_UNDERLAY8 = $00800000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY8}
WGL_SWAP_UNDERLAY9 = $01000000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY9}
WGL_SWAP_UNDERLAY10 = $02000000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY10}
WGL_SWAP_UNDERLAY11 = $04000000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY11}
WGL_SWAP_UNDERLAY12 = $08000000;


{$EXTERNALSYM WGL_SWAP_UNDERLAY12}
WGL_SWAP_UNDERLAY13 = $10000000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY13}
WGL_SWAP_UNDERLAY14 = $20000000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY14}
WGL_SWAP_UNDERLAY15 = $40000000;
{$EXTERNALSYM WGL_SWAP_UNDERLAY15}

function wglDescribeLayerPlane(hdc: HDC; iPixelFormat, iLayerPlane: Integer;
nBytes: UINT; plpd: LPLAYERPLANEDESCRIPTOR): BOOL; stdcall;
{$EXTERNALSYM wglDescribeLayerPlane}
function wglSetLayerPaletteEntries(hdc: HDC; iLayerPlane, iStart, cEntries: Integer;
pcr: LPCOLORREF): Integer; stdcall;
{$EXTERNALSYM wglSetLayerPaletteEntries}
function wglGetLayerPaletteEntries(hdc: HDC; iLayerPlane, iStart, cEntries: Integer;
pcr: LPCOLORREF): Integer; stdcall;
{$EXTERNALSYM wglGetLayerPaletteEntries}
function wglRealizeLayerPalette(hdc: HDC; iLayerPlane: Integer; bRealize: BOOL): BOOL; stdcall;
{$EXTERNALSYM wglRealizeLayerPalette}
function wglSwapLayerBuffers(hdc: HDC; fuPlanes: UINT): BOOL; stdcall;
{$EXTERNALSYM wglSwapLayerBuffers}



type
PWglSwap = ^TWglSwap;
_WGLSWAP = record
hdc: HDC;
uiFlags: UINT;
end;
{$EXTERNALSYM _WGLSWAP}
WGLSWAP = _WGLSWAP;
{$EXTERNALSYM WGLSWAP}
LPWGLSWAP = ^WGLSWAP;
{$EXTERNALSYM LPWGLSWAP}
TWglSwap = _WGLSWAP;

const
WGL_SWAPMULTIPLE_MAX = 16;
{$EXTERNALSYM WGL_SWAPMULTIPLE_MAX}

function wglSwapMultipleBuffers(fuCount: UINT; lpBuffers: LPWGLSWAP): DWORD; stdcall;
{$EXTERNALSYM wglSwapMultipleBuffers}

implementation

function MAKEROP4(Fore, Back: DWORD): DWORD;
begin
Result := ((Back shl 8) and DWORD($FF000000)) or Fore;
end;

function GetKValue(cmyk: COLORREF): BYTE;
begin
Result := BYTE(cmyk);
end;

function GetYValue(cmyk: COLORREF): BYTE;
begin
Result := BYTE(cmyk shr 8);
end;

function GetMValue(cmyk: COLORREF): BYTE;
begin
Result := BYTE(cmyk shr 16);
end;

function GetCValue(cmyk: COLORREF): BYTE;
begin
Result := BYTE(cmyk shr 24);


end;

function CMYK(c, m, y, k: BYTE): COLORREF;
begin
Result := COLORREF(k or (y shl 8) or (m shl 16) or (c shl 24));
end;

function MAKEPOINTS(l: DWORD): POINTS;
begin
Result.x := LOWORD(l);
Result.y := HIWORD(l);
end;

function RGB(r, g, b: BYTE): COLORREF;
begin
Result := COLORREF(r or (g shl 8) or (b shl 16));
end;

function PALETTERGB(r, g, b: BYTE): COLORREF;
begin
Result := $02000000 or RGB(r, g, b);
end;

function PALETTEINDEX(i: WORD): COLORREF;
begin
Result := COLORREF($01000000 or DWORD(i));
end;

function GetRValue(rgb: COLORREF): BYTE;
begin
Result := BYTE(RGB);
end;

function GetGValue(rgb: COLORREF): BYTE;
begin
Result := BYTE(rgb shr 8);
end;

function GetBValue(rgb: COLORREF): BYTE;
begin
Result := BYTE(rgb shr 16);
end;

const
gdi32 = ''gdi32.dll'';
msimg32 = ''msimg32.dll'';
winspool32 = ''winspool32.drv'';
opengl32 = ''opengl32.dll'';


{$IFDEF DYNAMIC_LINK}
var
_AddFontResourceA: Pointer;

function AddFontResourceA;
begin
GetProcedureAddress(_AddFontResourceA, gdi32, ''AddFontResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_AddFontResourceA]
end;
end;
{$ELSE}
function AddFontResourceA; external gdi32 name ''AddFontResourceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddFontResourceW: Pointer;

function AddFontResourceW;
begin
GetProcedureAddress(_AddFontResourceW, gdi32, ''AddFontResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_AddFontResourceW]
end;
end;
{$ELSE}
function AddFontResourceW; external gdi32 name ''AddFontResourceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_AddFontResource: Pointer;

function AddFontResource;
begin
GetProcedureAddress(_AddFontResource, gdi32, ''AddFontResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_AddFontResource]
end;
end;
{$ELSE}
function AddFontResource; external gdi32 name ''AddFontResourceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_AddFontResource: Pointer;

function AddFontResource;
begin
GetProcedureAddress(_AddFontResource, gdi32, ''AddFontResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_AddFontResource]
end;
end;
{$ELSE}
function AddFontResource; external gdi32 name ''AddFontResourceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AnimatePalette: Pointer;

function AnimatePalette;
begin
GetProcedureAddress(_AnimatePalette, gdi32, ''AnimatePalette'');
asm
mov esp, ebp
pop ebp
jmp [_AnimatePalette]
end;
end;
{$ELSE}
function AnimatePalette; external gdi32 name ''AnimatePalette'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Arc: Pointer;

function Arc;
begin
GetProcedureAddress(_Arc, gdi32, ''Arc'');
asm
mov esp, ebp
pop ebp
jmp [_Arc]
end;
end;
{$ELSE}
function Arc; external gdi32 name ''Arc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BitBlt: Pointer;

function BitBlt;
begin
GetProcedureAddress(_BitBlt, gdi32, ''BitBlt'');
asm
mov esp, ebp
pop ebp
jmp [_BitBlt]
end;
end;
{$ELSE}
function BitBlt; external gdi32 name ''BitBlt'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CancelDC: Pointer;

function CancelDC;
begin
GetProcedureAddress(_CancelDC, gdi32, ''CancelDC'');
asm
mov esp, ebp
pop ebp
jmp [_CancelDC]
end;
end;
{$ELSE}
function CancelDC; external gdi32 name ''CancelDC'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Chord: Pointer;

function Chord;
begin
GetProcedureAddress(_Chord, gdi32, ''Chord'');


asm
mov esp, ebp
pop ebp
jmp [_Chord]
end;
end;
{$ELSE}
function Chord; external gdi32 name ''Chord'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ChoosePixelFormat: Pointer;

function ChoosePixelFormat;
begin
GetProcedureAddress(_ChoosePixelFormat, gdi32, ''ChoosePixelFormat'');
asm
mov esp, ebp
pop ebp
jmp [_ChoosePixelFormat]
end;
end;
{$ELSE}
function ChoosePixelFormat; external gdi32 name ''ChoosePixelFormat'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CloseMetaFile: Pointer;

function CloseMetaFile;
begin
GetProcedureAddress(_CloseMetaFile, gdi32, ''CloseMetaFile'');
asm
mov esp, ebp
pop ebp
jmp [_CloseMetaFile]
end;
end;
{$ELSE}
function CloseMetaFile; external gdi32 name ''CloseMetaFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CombineRgn: Pointer;

function CombineRgn;


begin
GetProcedureAddress(_CombineRgn, gdi32, ''CombineRgn'');
asm
mov esp, ebp
pop ebp
jmp [_CombineRgn]
end;
end;
{$ELSE}
function CombineRgn; external gdi32 name ''CombineRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CopyMetaFileA: Pointer;

function CopyMetaFileA;
begin
GetProcedureAddress(_CopyMetaFileA, gdi32, ''CopyMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CopyMetaFileA]
end;
end;
{$ELSE}
function CopyMetaFileA; external gdi32 name ''CopyMetaFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CopyMetaFileW: Pointer;

function CopyMetaFileW;
begin
GetProcedureAddress(_CopyMetaFileW, gdi32, ''CopyMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CopyMetaFileW]
end;
end;
{$ELSE}
function CopyMetaFileW; external gdi32 name ''CopyMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}



{$IFDEF DYNAMIC_LINK}
var
_CopyMetaFile: Pointer;

function CopyMetaFile;
begin
GetProcedureAddress(_CopyMetaFile, gdi32, ''CopyMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CopyMetaFile]
end;
end;
{$ELSE}
function CopyMetaFile; external gdi32 name ''CopyMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CopyMetaFile: Pointer;

function CopyMetaFile;
begin
GetProcedureAddress(_CopyMetaFile, gdi32, ''CopyMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CopyMetaFile]
end;
end;
{$ELSE}
function CopyMetaFile; external gdi32 name ''CopyMetaFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateBitmap: Pointer;

function CreateBitmap;
begin
GetProcedureAddress(_CreateBitmap, gdi32, ''CreateBitmap'');
asm
mov esp, ebp
pop ebp
jmp [_CreateBitmap]
end;
end;
{$ELSE}
function CreateBitmap; external gdi32 name ''CreateBitmap'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateBitmapIndirect: Pointer;

function CreateBitmapIndirect;
begin
GetProcedureAddress(_CreateBitmapIndirect, gdi32, ''CreateBitmapIndirect'');
asm
mov esp, ebp
pop ebp
jmp [_CreateBitmapIndirect]
end;
end;
{$ELSE}
function CreateBitmapIndirect; external gdi32 name ''CreateBitmapIndirect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateBrushIndirect: Pointer;

function CreateBrushIndirect;
begin
GetProcedureAddress(_CreateBrushIndirect, gdi32, ''CreateBrushIndirect'');
asm
mov esp, ebp
pop ebp
jmp [_CreateBrushIndirect]
end;
end;
{$ELSE}
function CreateBrushIndirect; external gdi32 name ''CreateBrushIndirect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateCompatibleBitmap: Pointer;

function CreateCompatibleBitmap;
begin
GetProcedureAddress(_CreateCompatibleBitmap, gdi32, ''CreateCompatibleBitmap'');
asm
mov esp, ebp
pop ebp
jmp [_CreateCompatibleBitmap]
end;
end;
{$ELSE}
function CreateCompatibleBitmap; external gdi32 name ''CreateCompatibleBitmap'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateDiscardableBitmap: Pointer;

function CreateDiscardableBitmap;
begin
GetProcedureAddress(_CreateDiscardableBitmap, gdi32, ''CreateDiscardableBitmap'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDiscardableBitmap]
end;
end;
{$ELSE}
function CreateDiscardableBitmap; external gdi32 name ''CreateDiscardableBitmap'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateCompatibleDC: Pointer;

function CreateCompatibleDC;
begin
GetProcedureAddress(_CreateCompatibleDC, gdi32, ''CreateCompatibleDC'');
asm
mov esp, ebp
pop ebp
jmp [_CreateCompatibleDC]
end;
end;
{$ELSE}
function CreateCompatibleDC; external gdi32 name ''CreateCompatibleDC'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateDCA: Pointer;

function CreateDCA;
begin
GetProcedureAddress(_CreateDCA, gdi32, ''CreateDCA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDCA]
end;
end;
{$ELSE}
function CreateDCA; external gdi32 name ''CreateDCA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateDCW: Pointer;

function CreateDCW;
begin
GetProcedureAddress(_CreateDCW, gdi32, ''CreateDCW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDCW]
end;
end;
{$ELSE}
function CreateDCW; external gdi32 name ''CreateDCW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateDC: Pointer;

function CreateDC;
begin
GetProcedureAddress(_CreateDC, gdi32, ''CreateDCW'');
asm
mov esp, ebp

pop ebp
jmp [_CreateDC]
end;
end;
{$ELSE}
function CreateDC; external gdi32 name ''CreateDCW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateDC: Pointer;

function CreateDC;
begin
GetProcedureAddress(_CreateDC, gdi32, ''CreateDCA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDC]
end;
end;
{$ELSE}
function CreateDC; external gdi32 name ''CreateDCA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateDIBitmap: Pointer;

function CreateDIBitmap;
begin
GetProcedureAddress(_CreateDIBitmap, gdi32, ''CreateDIBitmap'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDIBitmap]
end;
end;
{$ELSE}
function CreateDIBitmap; external gdi32 name ''CreateDIBitmap'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateDIBPatternBrush: Pointer;

function CreateDIBPatternBrush;
begin
GetProcedureAddress(_CreateDIBPatternBrush, gdi32, ''CreateDIBPatternBrush'');

asm
mov esp, ebp
pop ebp
jmp [_CreateDIBPatternBrush]
end;
end;
{$ELSE}
function CreateDIBPatternBrush; external gdi32 name ''CreateDIBPatternBrush'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateDIBPatternBrushPt: Pointer;

function CreateDIBPatternBrushPt;
begin
GetProcedureAddress(_CreateDIBPatternBrushPt, gdi32, ''CreateDIBPatternBrushPt'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDIBPatternBrushPt]
end;
end;
{$ELSE}
function CreateDIBPatternBrushPt; external gdi32 name ''CreateDIBPatternBrushPt'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateEllipticRgn: Pointer;

function CreateEllipticRgn;
begin
GetProcedureAddress(_CreateEllipticRgn, gdi32, ''CreateEllipticRgn'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEllipticRgn]
end;
end;
{$ELSE}
function CreateEllipticRgn; external gdi32 name ''CreateEllipticRgn'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateEllipticRgnIndirect: Pointer;

function CreateEllipticRgnIndirect;
begin
GetProcedureAddress(_CreateEllipticRgnIndirect, gdi32, ''CreateEllipticRgnIndirect'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEllipticRgnIndirect]
end;
end;
{$ELSE}
function CreateEllipticRgnIndirect; external gdi32 name ''CreateEllipticRgnIndirect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontIndirectA: Pointer;

function CreateFontIndirectA;
begin
GetProcedureAddress(_CreateFontIndirectA, gdi32, ''CreateFontIndirectA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontIndirectA]
end;
end;
{$ELSE}
function CreateFontIndirectA; external gdi32 name ''CreateFontIndirectA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontIndirectW: Pointer;

function CreateFontIndirectW;
begin
GetProcedureAddress(_CreateFontIndirectW, gdi32, ''CreateFontIndirectW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontIndirectW]
end;
end;
{$ELSE}
function CreateFontIndirectW; external gdi32 name ''CreateFontIndirectW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontIndirect: Pointer;

function CreateFontIndirect;
begin
GetProcedureAddress(_CreateFontIndirect, gdi32, ''CreateFontIndirectW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontIndirect]
end;
end;
{$ELSE}
function CreateFontIndirect; external gdi32 name ''CreateFontIndirectW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontIndirect: Pointer;

function CreateFontIndirect;
begin
GetProcedureAddress(_CreateFontIndirect, gdi32, ''CreateFontIndirectA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontIndirect]
end;
end;
{$ELSE}
function CreateFontIndirect; external gdi32 name ''CreateFontIndirectA'';

{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontA: Pointer;

function CreateFontA;
begin
GetProcedureAddress(_CreateFontA, gdi32, ''CreateFontA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontA]
end;
end;
{$ELSE}
function CreateFontA; external gdi32 name ''CreateFontA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontW: Pointer;

function CreateFontW;
begin
GetProcedureAddress(_CreateFontW, gdi32, ''CreateFontW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontW]
end;
end;
{$ELSE}
function CreateFontW; external gdi32 name ''CreateFontW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFont: Pointer;

function CreateFont;
begin
GetProcedureAddress(_CreateFont, gdi32, ''CreateFontW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFont]
end;
end;


{$ELSE}
function CreateFont; external gdi32 name ''CreateFontW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFont: Pointer;

function CreateFont;
begin
GetProcedureAddress(_CreateFont, gdi32, ''CreateFontA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFont]
end;
end;
{$ELSE}
function CreateFont; external gdi32 name ''CreateFontA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateHatchBrush: Pointer;

function CreateHatchBrush;
begin
GetProcedureAddress(_CreateHatchBrush, gdi32, ''CreateHatchBrush'');
asm
mov esp, ebp
pop ebp
jmp [_CreateHatchBrush]
end;
end;
{$ELSE}
function CreateHatchBrush; external gdi32 name ''CreateHatchBrush'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateICA: Pointer;

function CreateICA;
begin
GetProcedureAddress(_CreateICA, gdi32, ''CreateICA'');

asm
mov esp, ebp
pop ebp
jmp [_CreateICA]
end;
end;
{$ELSE}
function CreateICA; external gdi32 name ''CreateICA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateICW: Pointer;

function CreateICW;
begin
GetProcedureAddress(_CreateICW, gdi32, ''CreateICW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateICW]
end;
end;
{$ELSE}
function CreateICW; external gdi32 name ''CreateICW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateIC: Pointer;

function CreateIC;
begin
GetProcedureAddress(_CreateIC, gdi32, ''CreateICW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateIC]
end;
end;
{$ELSE}
function CreateIC; external gdi32 name ''CreateICW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateIC: Pointer;

function CreateIC;
begin
GetProcedureAddress(_CreateIC, gdi32, ''CreateICA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateIC]
end;
end;
{$ELSE}
function CreateIC; external gdi32 name ''CreateICA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateMetaFileA: Pointer;

function CreateMetaFileA;
begin
GetProcedureAddress(_CreateMetaFileA, gdi32, ''CreateMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateMetaFileA]
end;
end;
{$ELSE}
function CreateMetaFileA; external gdi32 name ''CreateMetaFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateMetaFileW: Pointer;

function CreateMetaFileW;
begin
GetProcedureAddress(_CreateMetaFileW, gdi32, ''CreateMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateMetaFileW]
end;
end;
{$ELSE}
function CreateMetaFileW; external gdi32 name ''CreateMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateMetaFile: Pointer;

function CreateMetaFile;
begin
GetProcedureAddress(_CreateMetaFile, gdi32, ''CreateMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateMetaFile]
end;
end;
{$ELSE}
function CreateMetaFile; external gdi32 name ''CreateMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateMetaFile: Pointer;

function CreateMetaFile;
begin
GetProcedureAddress(_CreateMetaFile, gdi32, ''CreateMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateMetaFile]
end;
end;
{$ELSE}
function CreateMetaFile; external gdi32 name ''CreateMetaFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreatePalette: Pointer;

function CreatePalette;
begin
GetProcedureAddress(_CreatePalette, gdi32, ''CreatePalette'');
asm
mov esp, ebp
pop ebp
jmp [_CreatePalette]
end;
end;
{$ELSE}
function CreatePalette; external gdi32 name ''CreatePalette'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreatePen: Pointer;

function CreatePen;
begin
GetProcedureAddress(_CreatePen, gdi32, ''CreatePen'');
asm
mov esp, ebp
pop ebp
jmp [_CreatePen]
end;
end;
{$ELSE}
function CreatePen; external gdi32 name ''CreatePen'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreatePenIndirect: Pointer;

function CreatePenIndirect;
begin
GetProcedureAddress(_CreatePenIndirect, gdi32, ''CreatePenIndirect'');
asm
mov esp, ebp
pop ebp
jmp [_CreatePenIndirect]
end;
end;
{$ELSE}
function CreatePenIndirect; external gdi32 name ''CreatePenIndirect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreatePolyPolygonRgn: Pointer;

function CreatePolyPolygonRgn;
begin
GetProcedureAddress(_CreatePolyPolygonRgn, gdi32, ''CreatePolyPolygonRgn'');

asm
mov esp, ebp
pop ebp
jmp [_CreatePolyPolygonRgn]
end;
end;
{$ELSE}
function CreatePolyPolygonRgn; external gdi32 name ''CreatePolyPolygonRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreatePatternBrush: Pointer;

function CreatePatternBrush;
begin
GetProcedureAddress(_CreatePatternBrush, gdi32, ''CreatePatternBrush'');
asm
mov esp, ebp
pop ebp
jmp [_CreatePatternBrush]
end;
end;
{$ELSE}
function CreatePatternBrush; external gdi32 name ''CreatePatternBrush'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateRectRgn: Pointer;

function CreateRectRgn;
begin
GetProcedureAddress(_CreateRectRgn, gdi32, ''CreateRectRgn'');
asm
mov esp, ebp
pop ebp
jmp [_CreateRectRgn]
end;
end;
{$ELSE}
function CreateRectRgn; external gdi32 name ''CreateRectRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateRectRgnIndirect: Pointer;

function CreateRectRgnIndirect;
begin
GetProcedureAddress(_CreateRectRgnIndirect, gdi32, ''CreateRectRgnIndirect'');
asm
mov esp, ebp
pop ebp
jmp [_CreateRectRgnIndirect]
end;
end;
{$ELSE}
function CreateRectRgnIndirect; external gdi32 name ''CreateRectRgnIndirect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateRoundRectRgn: Pointer;

function CreateRoundRectRgn;
begin
GetProcedureAddress(_CreateRoundRectRgn, gdi32, ''CreateRoundRectRgn'');
asm
mov esp, ebp
pop ebp
jmp [_CreateRoundRectRgn]
end;
end;
{$ELSE}
function CreateRoundRectRgn; external gdi32 name ''CreateRoundRectRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateScalableFontResourceA: Pointer;

function CreateScalableFontResourceA;
begin
GetProcedureAddress(_CreateScalableFontResourceA, gdi32, ''CreateScalableFontResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateScalableFontResourceA]
end;
end;
{$ELSE}
function CreateScalableFontResourceA; external gdi32 name ''CreateScalableFontResourceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateScalableFontResourceW: Pointer;

function CreateScalableFontResourceW;
begin
GetProcedureAddress(_CreateScalableFontResourceW, gdi32, ''CreateScalableFontResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateScalableFontResourceW]
end;
end;
{$ELSE}
function CreateScalableFontResourceW; external gdi32 name ''CreateScalableFontResourceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateScalableFontResource: Pointer;

function CreateScalableFontResource;
begin
GetProcedureAddress(_CreateScalableFontResource, gdi32, ''CreateScalableFontResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateScalableFontResource]


end;
end;
{$ELSE}
function CreateScalableFontResource; external gdi32 name ''CreateScalableFontResourceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateScalableFontResource: Pointer;

function CreateScalableFontResource;
begin
GetProcedureAddress(_CreateScalableFontResource, gdi32, ''CreateScalableFontResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateScalableFontResource]
end;
end;
{$ELSE}
function CreateScalableFontResource; external gdi32 name ''CreateScalableFontResourceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateSolidBrush: Pointer;

function CreateSolidBrush;
begin
GetProcedureAddress(_CreateSolidBrush, gdi32, ''CreateSolidBrush'');
asm
mov esp, ebp
pop ebp
jmp [_CreateSolidBrush]
end;
end;
{$ELSE}
function CreateSolidBrush; external gdi32 name ''CreateSolidBrush'';
{$ENDIF DYNAMIC_LINK}


{$IFDEF DYNAMIC_LINK}
var
_DeleteDC: Pointer;

function DeleteDC;
begin
GetProcedureAddress(_DeleteDC, gdi32, ''DeleteDC'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteDC]
end;
end;
{$ELSE}
function DeleteDC; external gdi32 name ''DeleteDC'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteMetaFile: Pointer;

function DeleteMetaFile;
begin
GetProcedureAddress(_DeleteMetaFile, gdi32, ''DeleteMetaFile'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteMetaFile]
end;
end;
{$ELSE}
function DeleteMetaFile; external gdi32 name ''DeleteMetaFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteObject: Pointer;

function DeleteObject;
begin
GetProcedureAddress(_DeleteObject, gdi32, ''DeleteObject'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteObject]
end;
end;
{$ELSE}
function DeleteObject; external gdi32 name ''DeleteObject'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DescribePixelFormat: Pointer;

function DescribePixelFormat;
begin
GetProcedureAddress(_DescribePixelFormat, gdi32, ''DescribePixelFormat'');
asm
mov esp, ebp
pop ebp
jmp [_DescribePixelFormat]
end;
end;
{$ELSE}
function DescribePixelFormat; external gdi32 name ''DescribePixelFormat'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeviceCapabilitiesA: Pointer;

function DeviceCapabilitiesA;
begin
GetProcedureAddress(_DeviceCapabilitiesA, winspool32, ''DeviceCapabilitiesA'');
asm
mov esp, ebp
pop ebp
jmp [_DeviceCapabilitiesA]
end;
end;
{$ELSE}
function DeviceCapabilitiesA; external winspool32 name ''DeviceCapabilitiesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeviceCapabilitiesW: Pointer;

function DeviceCapabilitiesW;
begin
GetProcedureAddress(_DeviceCapabilitiesW, winspool32, ''DeviceCapabilitiesW'');


asm
mov esp, ebp
pop ebp
jmp [_DeviceCapabilitiesW]
end;
end;
{$ELSE}
function DeviceCapabilitiesW; external winspool32 name ''DeviceCapabilitiesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_DeviceCapabilities: Pointer;

function DeviceCapabilities;
begin
GetProcedureAddress(_DeviceCapabilities, winspool32, ''DeviceCapabilitiesW'');
asm
mov esp, ebp
pop ebp
jmp [_DeviceCapabilities]
end;
end;
{$ELSE}
function DeviceCapabilities; external winspool32 name ''DeviceCapabilitiesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_DeviceCapabilities: Pointer;

function DeviceCapabilities;
begin
GetProcedureAddress(_DeviceCapabilities, winspool32, ''DeviceCapabilitiesA'');
asm
mov esp, ebp
pop ebp
jmp [_DeviceCapabilities]
end;
end;
{$ELSE}
function DeviceCapabilities; external winspool32 name ''DeviceCapabilitiesA'';


{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_DrawEscape: Pointer;

function DrawEscape;
begin
GetProcedureAddress(_DrawEscape, gdi32, ''DrawEscape'');
asm
mov esp, ebp
pop ebp
jmp [_DrawEscape]
end;
end;
{$ELSE}
function DrawEscape; external gdi32 name ''DrawEscape'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Ellipse: Pointer;

function Ellipse;
begin
GetProcedureAddress(_Ellipse, gdi32, ''Ellipse'');
asm
mov esp, ebp
pop ebp
jmp [_Ellipse]
end;
end;
{$ELSE}
function Ellipse; external gdi32 name ''Ellipse'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontFamiliesExA: Pointer;

function EnumFontFamiliesExA;
begin
GetProcedureAddress(_EnumFontFamiliesExA, gdi32, ''EnumFontFamiliesExA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontFamiliesExA]
end;
end;
{$ELSE}


function EnumFontFamiliesExA; external gdi32 name ''EnumFontFamiliesExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontFamiliesExW: Pointer;

function EnumFontFamiliesExW;
begin
GetProcedureAddress(_EnumFontFamiliesExW, gdi32, ''EnumFontFamiliesExW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontFamiliesExW]
end;
end;
{$ELSE}
function EnumFontFamiliesExW; external gdi32 name ''EnumFontFamiliesExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontFamiliesEx: Pointer;

function EnumFontFamiliesEx;
begin
GetProcedureAddress(_EnumFontFamiliesEx, gdi32, ''EnumFontFamiliesExW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontFamiliesEx]
end;
end;
{$ELSE}
function EnumFontFamiliesEx; external gdi32 name ''EnumFontFamiliesExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontFamiliesEx: Pointer;



function EnumFontFamiliesEx;
begin
GetProcedureAddress(_EnumFontFamiliesEx, gdi32, ''EnumFontFamiliesExA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontFamiliesEx]
end;
end;
{$ELSE}
function EnumFontFamiliesEx; external gdi32 name ''EnumFontFamiliesExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontFamiliesA: Pointer;

function EnumFontFamiliesA;
begin
GetProcedureAddress(_EnumFontFamiliesA, gdi32, ''EnumFontFamiliesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontFamiliesA]
end;
end;
{$ELSE}
function EnumFontFamiliesA; external gdi32 name ''EnumFontFamiliesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontFamiliesW: Pointer;

function EnumFontFamiliesW;
begin
GetProcedureAddress(_EnumFontFamiliesW, gdi32, ''EnumFontFamiliesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontFamiliesW]
end;
end;
{$ELSE}
function EnumFontFamiliesW; external gdi32 name ''EnumFontFamiliesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontFamilies: Pointer;

function EnumFontFamilies;
begin
GetProcedureAddress(_EnumFontFamilies, gdi32, ''EnumFontFamiliesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontFamilies]
end;
end;
{$ELSE}
function EnumFontFamilies; external gdi32 name ''EnumFontFamiliesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontFamilies: Pointer;

function EnumFontFamilies;
begin
GetProcedureAddress(_EnumFontFamilies, gdi32, ''EnumFontFamiliesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontFamilies]
end;
end;
{$ELSE}
function EnumFontFamilies; external gdi32 name ''EnumFontFamiliesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontsA: Pointer;

function EnumFontsA;
begin
GetProcedureAddress(_EnumFontsA, gdi32, ''EnumFontsA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontsA]
end;
end;
{$ELSE}
function EnumFontsA; external gdi32 name ''EnumFontsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumFontsW: Pointer;

function EnumFontsW;
begin
GetProcedureAddress(_EnumFontsW, gdi32, ''EnumFontsW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFontsW]
end;
end;
{$ELSE}
function EnumFontsW; external gdi32 name ''EnumFontsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EnumFonts: Pointer;

function EnumFonts;
begin
GetProcedureAddress(_EnumFonts, gdi32, ''EnumFontsW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFonts]
end;
end;
{$ELSE}
function EnumFonts; external gdi32 name ''EnumFontsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EnumFonts: Pointer;

function EnumFonts;
begin
GetProcedureAddress(_EnumFonts, gdi32, ''EnumFontsA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumFonts]
end;
end;
{$ELSE}
function EnumFonts; external gdi32 name ''EnumFontsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_EnumObjects: Pointer;

function EnumObjects;
begin
GetProcedureAddress(_EnumObjects, gdi32, ''EnumObjects'');
asm
mov esp, ebp
pop ebp
jmp [_EnumObjects]
end;
end;
{$ELSE}
function EnumObjects; external gdi32 name ''EnumObjects'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EqualRgn: Pointer;

function EqualRgn;
begin
GetProcedureAddress(_EqualRgn, gdi32, ''EqualRgn'');
asm
mov esp, ebp
pop ebp
jmp [_EqualRgn]
end;
end;
{$ELSE}
function EqualRgn; external gdi32 name ''EqualRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Escape: Pointer;

function Escape;
begin
GetProcedureAddress(_Escape, gdi32, ''Escape'');
asm
mov esp, ebp
pop ebp
jmp [_Escape]
end;
end;
{$ELSE}
function Escape; external gdi32 name ''Escape'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExtEscape: Pointer;

function ExtEscape;
begin
GetProcedureAddress(_ExtEscape, gdi32, ''ExtEscape'');
asm
mov esp, ebp
pop ebp
jmp [_ExtEscape]
end;
end;
{$ELSE}
function ExtEscape; external gdi32 name ''ExtEscape'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExcludeClipRect: Pointer;

function ExcludeClipRect;
begin
GetProcedureAddress(_ExcludeClipRect, gdi32, ''ExcludeClipRect'');
asm
mov esp, ebp
pop ebp
jmp [_ExcludeClipRect]
end;
end;
{$ELSE}
function ExcludeClipRect; external gdi32 name ''ExcludeClipRect'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExtCreateRegion: Pointer;

function ExtCreateRegion;
begin
GetProcedureAddress(_ExtCreateRegion, gdi32, ''ExtCreateRegion'');
asm
mov esp, ebp
pop ebp
jmp [_ExtCreateRegion]
end;
end;
{$ELSE}
function ExtCreateRegion; external gdi32 name ''ExtCreateRegion'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExtFloodFill: Pointer;

function ExtFloodFill;
begin
GetProcedureAddress(_ExtFloodFill, gdi32, ''ExtFloodFill'');
asm
mov esp, ebp
pop ebp
jmp [_ExtFloodFill]
end;
end;
{$ELSE}
function ExtFloodFill; external gdi32 name ''ExtFloodFill'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FillRgn: Pointer;

function FillRgn;
begin
GetProcedureAddress(_FillRgn, gdi32, ''FillRgn'');
asm
mov esp, ebp
pop ebp
jmp [_FillRgn]
end;
end;
{$ELSE}
function FillRgn; external gdi32 name ''FillRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FloodFill: Pointer;

function FloodFill;
begin
GetProcedureAddress(_FloodFill, gdi32, ''FloodFill'');
asm
mov esp, ebp
pop ebp
jmp [_FloodFill]
end;
end;
{$ELSE}
function FloodFill; external gdi32 name ''FloodFill'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FrameRgn: Pointer;

function FrameRgn;
begin
GetProcedureAddress(_FrameRgn, gdi32, ''FrameRgn'');
asm
mov esp, ebp
pop ebp
jmp [_FrameRgn]
end;
end;
{$ELSE}
function FrameRgn; external gdi32 name ''FrameRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetROP2: Pointer;

function GetROP2;
begin
GetProcedureAddress(_GetROP2, gdi32, ''GetROP2'');
asm
mov esp, ebp
pop ebp
jmp [_GetROP2]
end;
end;
{$ELSE}
function GetROP2; external gdi32 name ''GetROP2'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetAspectRatioFilterEx: Pointer;

function GetAspectRatioFilterEx;
begin
GetProcedureAddress(_GetAspectRatioFilterEx, gdi32, ''GetAspectRatioFilterEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetAspectRatioFilterEx]
end;
end;
{$ELSE}
function GetAspectRatioFilterEx; external gdi32 name ''GetAspectRatioFilterEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetBkColor: Pointer;

function GetBkColor;
begin
GetProcedureAddress(_GetBkColor, gdi32, ''GetBkColor'');
asm
mov esp, ebp
pop ebp
jmp [_GetBkColor]
end;
end;
{$ELSE}
function GetBkColor; external gdi32 name ''GetBkColor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDCBrushColor: Pointer;

function GetDCBrushColor;
begin
GetProcedureAddress(_GetDCBrushColor, gdi32, ''GetDCBrushColor'');
asm
mov esp, ebp


pop ebp
jmp [_GetDCBrushColor]
end;
end;
{$ELSE}
function GetDCBrushColor; external gdi32 name ''GetDCBrushColor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDCPenColor: Pointer;

function GetDCPenColor;
begin
GetProcedureAddress(_GetDCPenColor, gdi32, ''GetDCPenColor'');
asm
mov esp, ebp
pop ebp
jmp [_GetDCPenColor]
end;
end;
{$ELSE}
function GetDCPenColor; external gdi32 name ''GetDCPenColor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetBkMode: Pointer;

function GetBkMode;
begin
GetProcedureAddress(_GetBkMode, gdi32, ''GetBkMode'');
asm
mov esp, ebp
pop ebp
jmp [_GetBkMode]
end;
end;
{$ELSE}
function GetBkMode; external gdi32 name ''GetBkMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetBitmapBits: Pointer;

function GetBitmapBits;
begin
GetProcedureAddress(_GetBitmapBits, gdi32, ''GetBitmapBits'');
asm
mov esp, ebp
pop ebp
jmp [_GetBitmapBits]
end;
end;
{$ELSE}
function GetBitmapBits; external gdi32 name ''GetBitmapBits'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetBitmapDimensionEx: Pointer;

function GetBitmapDimensionEx;
begin
GetProcedureAddress(_GetBitmapDimensionEx, gdi32, ''GetBitmapDimensionEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetBitmapDimensionEx]
end;
end;
{$ELSE}
function GetBitmapDimensionEx; external gdi32 name ''GetBitmapDimensionEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetBoundsRect: Pointer;

function GetBoundsRect;
begin
GetProcedureAddress(_GetBoundsRect, gdi32, ''GetBoundsRect'');
asm
mov esp, ebp
pop ebp
jmp [_GetBoundsRect]
end;
end;
{$ELSE}
function GetBoundsRect; external gdi32 name ''GetBoundsRect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var


_GetBrushOrgEx: Pointer;

function GetBrushOrgEx;
begin
GetProcedureAddress(_GetBrushOrgEx, gdi32, ''GetBrushOrgEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetBrushOrgEx]
end;
end;
{$ELSE}
function GetBrushOrgEx; external gdi32 name ''GetBrushOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidthA: Pointer;

function GetCharWidthA;
begin
GetProcedureAddress(_GetCharWidthA, gdi32, ''GetCharWidthA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidthA]
end;
end;
{$ELSE}
function GetCharWidthA; external gdi32 name ''GetCharWidthA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidthW: Pointer;

function GetCharWidthW;
begin
GetProcedureAddress(_GetCharWidthW, gdi32, ''GetCharWidthW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidthW]
end;
end;
{$ELSE}
function GetCharWidthW; external gdi32 name ''GetCharWidthW'';

{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidth: Pointer;

function GetCharWidth;
begin
GetProcedureAddress(_GetCharWidth, gdi32, ''GetCharWidthW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidth]
end;
end;
{$ELSE}
function GetCharWidth; external gdi32 name ''GetCharWidthW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidth: Pointer;

function GetCharWidth;
begin
GetProcedureAddress(_GetCharWidth, gdi32, ''GetCharWidthA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidth]
end;
end;
{$ELSE}
function GetCharWidth; external gdi32 name ''GetCharWidthA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidth32A: Pointer;

function GetCharWidth32A;
begin
GetProcedureAddress(_GetCharWidth32A, gdi32, ''GetCharWidth32A'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidth32A]
end;
end;
{$ELSE}
function GetCharWidth32A; external gdi32 name ''GetCharWidth32A'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidth32W: Pointer;

function GetCharWidth32W;
begin
GetProcedureAddress(_GetCharWidth32W, gdi32, ''GetCharWidth32W'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidth32W]
end;
end;
{$ELSE}
function GetCharWidth32W; external gdi32 name ''GetCharWidth32W'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidth32: Pointer;

function GetCharWidth32;
begin
GetProcedureAddress(_GetCharWidth32, gdi32, ''GetCharWidth32W'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidth32]
end;
end;
{$ELSE}
function GetCharWidth32; external gdi32 name ''GetCharWidth32W'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidth32: Pointer;



function GetCharWidth32;
begin
GetProcedureAddress(_GetCharWidth32, gdi32, ''GetCharWidth32A'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidth32]
end;
end;
{$ELSE}
function GetCharWidth32; external gdi32 name ''GetCharWidth32A'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidthFloatA: Pointer;

function GetCharWidthFloatA;
begin
GetProcedureAddress(_GetCharWidthFloatA, gdi32, ''GetCharWidthFloatA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidthFloatA]
end;
end;
{$ELSE}
function GetCharWidthFloatA; external gdi32 name ''GetCharWidthFloatA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidthFloatW: Pointer;

function GetCharWidthFloatW;
begin
GetProcedureAddress(_GetCharWidthFloatW, gdi32, ''GetCharWidthFloatW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidthFloatW]
end;
end;
{$ELSE}
function GetCharWidthFloatW; external gdi32 name ''GetCharWidthFloatW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidthFloat: Pointer;

function GetCharWidthFloat;
begin
GetProcedureAddress(_GetCharWidthFloat, gdi32, ''GetCharWidthFloatW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidthFloat]
end;
end;
{$ELSE}
function GetCharWidthFloat; external gdi32 name ''GetCharWidthFloatW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidthFloat: Pointer;

function GetCharWidthFloat;
begin
GetProcedureAddress(_GetCharWidthFloat, gdi32, ''GetCharWidthFloatA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidthFloat]
end;
end;
{$ELSE}
function GetCharWidthFloat; external gdi32 name ''GetCharWidthFloatA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetCharABCWidthsA: Pointer;

function GetCharABCWidthsA;
begin
GetProcedureAddress(_GetCharABCWidthsA, gdi32, ''GetCharABCWidthsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharABCWidthsA]
end;
end;
{$ELSE}
function GetCharABCWidthsA; external gdi32 name ''GetCharABCWidthsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharABCWidthsW: Pointer;

function GetCharABCWidthsW;
begin
GetProcedureAddress(_GetCharABCWidthsW, gdi32, ''GetCharABCWidthsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharABCWidthsW]
end;
end;
{$ELSE}
function GetCharABCWidthsW; external gdi32 name ''GetCharABCWidthsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharABCWidths: Pointer;

function GetCharABCWidths;
begin
GetProcedureAddress(_GetCharABCWidths, gdi32, ''GetCharABCWidthsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharABCWidths]
end;

end;
{$ELSE}
function GetCharABCWidths; external gdi32 name ''GetCharABCWidthsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharABCWidths: Pointer;

function GetCharABCWidths;
begin
GetProcedureAddress(_GetCharABCWidths, gdi32, ''GetCharABCWidthsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharABCWidths]
end;
end;
{$ELSE}
function GetCharABCWidths; external gdi32 name ''GetCharABCWidthsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetCharABCWidthsFloatA: Pointer;

function GetCharABCWidthsFloatA;
begin
GetProcedureAddress(_GetCharABCWidthsFloatA, gdi32, ''GetCharABCWidthsFloatA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharABCWidthsFloatA]
end;
end;
{$ELSE}
function GetCharABCWidthsFloatA; external gdi32 name ''GetCharABCWidthsFloatA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharABCWidthsFloatW: Pointer;

function GetCharABCWidthsFloatW;
begin
GetProcedureAddress(_GetCharABCWidthsFloatW, gdi32, ''GetCharABCWidthsFloatW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharABCWidthsFloatW]
end;
end;
{$ELSE}
function GetCharABCWidthsFloatW; external gdi32 name ''GetCharABCWidthsFloatW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharABCWidthsFloat: Pointer;

function GetCharABCWidthsFloat;
begin
GetProcedureAddress(_GetCharABCWidthsFloat, gdi32, ''GetCharABCWidthsFloatW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharABCWidthsFloat]
end;
end;
{$ELSE}
function GetCharABCWidthsFloat; external gdi32 name ''GetCharABCWidthsFloatW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharABCWidthsFloat: Pointer;

function GetCharABCWidthsFloat;
begin
GetProcedureAddress(_GetCharABCWidthsFloat, gdi32, ''GetCharABCWidthsFloatA'');

asm
mov esp, ebp
pop ebp
jmp [_GetCharABCWidthsFloat]
end;
end;
{$ELSE}
function GetCharABCWidthsFloat; external gdi32 name ''GetCharABCWidthsFloatA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetClipBox: Pointer;

function GetClipBox;
begin
GetProcedureAddress(_GetClipBox, gdi32, ''GetClipBox'');
asm
mov esp, ebp
pop ebp
jmp [_GetClipBox]
end;
end;
{$ELSE}
function GetClipBox; external gdi32 name ''GetClipBox'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetClipRgn: Pointer;

function GetClipRgn;
begin
GetProcedureAddress(_GetClipRgn, gdi32, ''GetClipRgn'');
asm
mov esp, ebp
pop ebp
jmp [_GetClipRgn]
end;
end;
{$ELSE}
function GetClipRgn; external gdi32 name ''GetClipRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetMetaRgn: Pointer;

function GetMetaRgn;

begin
GetProcedureAddress(_GetMetaRgn, gdi32, ''GetMetaRgn'');
asm
mov esp, ebp
pop ebp
jmp [_GetMetaRgn]
end;
end;
{$ELSE}
function GetMetaRgn; external gdi32 name ''GetMetaRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentObject: Pointer;

function GetCurrentObject;
begin
GetProcedureAddress(_GetCurrentObject, gdi32, ''GetCurrentObject'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentObject]
end;
end;
{$ELSE}
function GetCurrentObject; external gdi32 name ''GetCurrentObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCurrentPositionEx: Pointer;

function GetCurrentPositionEx;
begin
GetProcedureAddress(_GetCurrentPositionEx, gdi32, ''GetCurrentPositionEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetCurrentPositionEx]
end;
end;
{$ELSE}
function GetCurrentPositionEx; external gdi32 name ''GetCurrentPositionEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDeviceCaps: Pointer;

function GetDeviceCaps;
begin
GetProcedureAddress(_GetDeviceCaps, gdi32, ''GetDeviceCaps'');
asm
mov esp, ebp
pop ebp
jmp [_GetDeviceCaps]
end;
end;
{$ELSE}
function GetDeviceCaps; external gdi32 name ''GetDeviceCaps'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDIBits: Pointer;

function GetDIBits;
begin
GetProcedureAddress(_GetDIBits, gdi32, ''GetDIBits'');
asm
mov esp, ebp
pop ebp
jmp [_GetDIBits]
end;
end;
{$ELSE}
function GetDIBits; external gdi32 name ''GetDIBits'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFontData: Pointer;

function GetFontData;
begin
GetProcedureAddress(_GetFontData, gdi32, ''GetFontData'');
asm
mov esp, ebp
pop ebp
jmp [_GetFontData]
end;
end;
{$ELSE}
function GetFontData; external gdi32 name ''GetFontData'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetGlyphOutlineA: Pointer;

function GetGlyphOutlineA;
begin
GetProcedureAddress(_GetGlyphOutlineA, gdi32, ''GetGlyphOutlineA'');
asm
mov esp, ebp
pop ebp
jmp [_GetGlyphOutlineA]
end;
end;
{$ELSE}
function GetGlyphOutlineA; external gdi32 name ''GetGlyphOutlineA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetGlyphOutlineW: Pointer;

function GetGlyphOutlineW;
begin
GetProcedureAddress(_GetGlyphOutlineW, gdi32, ''GetGlyphOutlineW'');
asm
mov esp, ebp
pop ebp
jmp [_GetGlyphOutlineW]
end;
end;
{$ELSE}
function GetGlyphOutlineW; external gdi32 name ''GetGlyphOutlineW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetGlyphOutline: Pointer;

function GetGlyphOutline;
begin
GetProcedureAddress(_GetGlyphOutline, gdi32, ''GetGlyphOutlineW'');
asm

mov esp, ebp
pop ebp
jmp [_GetGlyphOutline]
end;
end;
{$ELSE}
function GetGlyphOutline; external gdi32 name ''GetGlyphOutlineW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetGlyphOutline: Pointer;

function GetGlyphOutline;
begin
GetProcedureAddress(_GetGlyphOutline, gdi32, ''GetGlyphOutlineA'');
asm
mov esp, ebp
pop ebp
jmp [_GetGlyphOutline]
end;
end;
{$ELSE}
function GetGlyphOutline; external gdi32 name ''GetGlyphOutlineA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetGraphicsMode: Pointer;

function GetGraphicsMode;
begin
GetProcedureAddress(_GetGraphicsMode, gdi32, ''GetGraphicsMode'');
asm
mov esp, ebp
pop ebp
jmp [_GetGraphicsMode]
end;
end;
{$ELSE}
function GetGraphicsMode; external gdi32 name ''GetGraphicsMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var

_GetMapMode: Pointer;

function GetMapMode;
begin
GetProcedureAddress(_GetMapMode, gdi32, ''GetMapMode'');
asm
mov esp, ebp
pop ebp
jmp [_GetMapMode]
end;
end;
{$ELSE}
function GetMapMode; external gdi32 name ''GetMapMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetMetaFileBitsEx: Pointer;

function GetMetaFileBitsEx;
begin
GetProcedureAddress(_GetMetaFileBitsEx, gdi32, ''GetMetaFileBitsEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetMetaFileBitsEx]
end;
end;
{$ELSE}
function GetMetaFileBitsEx; external gdi32 name ''GetMetaFileBitsEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetMetaFileA: Pointer;

function GetMetaFileA;
begin
GetProcedureAddress(_GetMetaFileA, gdi32, ''GetMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_GetMetaFileA]
end;
end;
{$ELSE}
function GetMetaFileA; external gdi32 name ''GetMetaFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetMetaFileW: Pointer;

function GetMetaFileW;
begin
GetProcedureAddress(_GetMetaFileW, gdi32, ''GetMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_GetMetaFileW]
end;
end;
{$ELSE}
function GetMetaFileW; external gdi32 name ''GetMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetMetaFile: Pointer;

function GetMetaFile;
begin
GetProcedureAddress(_GetMetaFile, gdi32, ''GetMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_GetMetaFile]
end;
end;
{$ELSE}
function GetMetaFile; external gdi32 name ''GetMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetMetaFile: Pointer;

function GetMetaFile;
begin
GetProcedureAddress(_GetMetaFile, gdi32, ''GetMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_GetMetaFile]


end;
end;
{$ELSE}
function GetMetaFile; external gdi32 name ''GetMetaFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetNearestColor: Pointer;

function GetNearestColor;
begin
GetProcedureAddress(_GetNearestColor, gdi32, ''GetNearestColor'');
asm
mov esp, ebp
pop ebp
jmp [_GetNearestColor]
end;
end;
{$ELSE}
function GetNearestColor; external gdi32 name ''GetNearestColor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetNearestPaletteIndex: Pointer;

function GetNearestPaletteIndex;
begin
GetProcedureAddress(_GetNearestPaletteIndex, gdi32, ''GetNearestPaletteIndex'');
asm
mov esp, ebp
pop ebp
jmp [_GetNearestPaletteIndex]
end;
end;
{$ELSE}
function GetNearestPaletteIndex; external gdi32 name ''GetNearestPaletteIndex'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetObjectType: Pointer;

function GetObjectType;
begin
GetProcedureAddress(_GetObjectType, gdi32, ''GetObjectType'');
asm
mov esp, ebp
pop ebp
jmp [_GetObjectType]
end;
end;
{$ELSE}
function GetObjectType; external gdi32 name ''GetObjectType'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetOutlineTextMetricsA: Pointer;

function GetOutlineTextMetricsA;
begin
GetProcedureAddress(_GetOutlineTextMetricsA, gdi32, ''GetOutlineTextMetricsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetOutlineTextMetricsA]
end;
end;
{$ELSE}
function GetOutlineTextMetricsA; external gdi32 name ''GetOutlineTextMetricsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetOutlineTextMetricsW: Pointer;

function GetOutlineTextMetricsW;
begin
GetProcedureAddress(_GetOutlineTextMetricsW, gdi32, ''GetOutlineTextMetricsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetOutlineTextMetricsW]

end;
end;
{$ELSE}
function GetOutlineTextMetricsW; external gdi32 name ''GetOutlineTextMetricsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetOutlineTextMetrics: Pointer;

function GetOutlineTextMetrics;
begin
GetProcedureAddress(_GetOutlineTextMetrics, gdi32, ''GetOutlineTextMetricsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetOutlineTextMetrics]
end;
end;
{$ELSE}
function GetOutlineTextMetrics; external gdi32 name ''GetOutlineTextMetricsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetOutlineTextMetrics: Pointer;

function GetOutlineTextMetrics;
begin
GetProcedureAddress(_GetOutlineTextMetrics, gdi32, ''GetOutlineTextMetricsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetOutlineTextMetrics]
end;
end;
{$ELSE}
function GetOutlineTextMetrics; external gdi32 name ''GetOutlineTextMetricsA'';
{$ENDIF DYNAMIC_LINK}


{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetPaletteEntries: Pointer;

function GetPaletteEntries;
begin
GetProcedureAddress(_GetPaletteEntries, gdi32, ''GetPaletteEntries'');
asm
mov esp, ebp
pop ebp
jmp [_GetPaletteEntries]
end;
end;
{$ELSE}
function GetPaletteEntries; external gdi32 name ''GetPaletteEntries'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPixel: Pointer;

function GetPixel;
begin
GetProcedureAddress(_GetPixel, gdi32, ''GetPixel'');
asm
mov esp, ebp
pop ebp
jmp [_GetPixel]
end;
end;
{$ELSE}
function GetPixel; external gdi32 name ''GetPixel'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPixelFormat: Pointer;

function GetPixelFormat;
begin
GetProcedureAddress(_GetPixelFormat, gdi32, ''GetPixelFormat'');
asm
mov esp, ebp
pop ebp
jmp [_GetPixelFormat]
end;
end;
{$ELSE}
function GetPixelFormat; external gdi32 name ''GetPixelFormat'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPolyFillMode: Pointer;

function GetPolyFillMode;
begin
GetProcedureAddress(_GetPolyFillMode, gdi32, ''GetPolyFillMode'');
asm
mov esp, ebp
pop ebp
jmp [_GetPolyFillMode]
end;
end;
{$ELSE}
function GetPolyFillMode; external gdi32 name ''GetPolyFillMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetRasterizerCaps: Pointer;

function GetRasterizerCaps;
begin
GetProcedureAddress(_GetRasterizerCaps, gdi32, ''GetRasterizerCaps'');
asm
mov esp, ebp
pop ebp
jmp [_GetRasterizerCaps]
end;
end;
{$ELSE}
function GetRasterizerCaps; external gdi32 name ''GetRasterizerCaps'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetRandomRgn: Pointer;

function GetRandomRgn;
begin
GetProcedureAddress(_GetRandomRgn, gdi32, ''GetRandomRgn'');
asm
mov esp, ebp
pop ebp
jmp [_GetRandomRgn]
end;
end;
{$ELSE}
function GetRandomRgn; external gdi32 name ''GetRandomRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetRegionData: Pointer;

function GetRegionData;
begin
GetProcedureAddress(_GetRegionData, gdi32, ''GetRegionData'');
asm
mov esp, ebp
pop ebp
jmp [_GetRegionData]
end;
end;
{$ELSE}
function GetRegionData; external gdi32 name ''GetRegionData'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetRgnBox: Pointer;

function GetRgnBox;
begin
GetProcedureAddress(_GetRgnBox, gdi32, ''GetRgnBox'');
asm
mov esp, ebp
pop ebp
jmp [_GetRgnBox]
end;
end;
{$ELSE}
function GetRgnBox; external gdi32 name ''GetRgnBox'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetStockObject: Pointer;

function GetStockObject;
begin
GetProcedureAddress(_GetStockObject, gdi32, ''GetStockObject'');

asm
mov esp, ebp
pop ebp
jmp [_GetStockObject]
end;
end;
{$ELSE}
function GetStockObject; external gdi32 name ''GetStockObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetStretchBltMode: Pointer;

function GetStretchBltMode;
begin
GetProcedureAddress(_GetStretchBltMode, gdi32, ''GetStretchBltMode'');
asm
mov esp, ebp
pop ebp
jmp [_GetStretchBltMode]
end;
end;
{$ELSE}
function GetStretchBltMode; external gdi32 name ''GetStretchBltMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetSystemPaletteEntries: Pointer;

function GetSystemPaletteEntries;
begin
GetProcedureAddress(_GetSystemPaletteEntries, gdi32, ''GetSystemPaletteEntries'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemPaletteEntries]
end;
end;
{$ELSE}
function GetSystemPaletteEntries; external gdi32 name ''GetSystemPaletteEntries'';
{$ENDIF DYNAMIC_LINK}


{$IFDEF DYNAMIC_LINK}
var
_GetSystemPaletteUse: Pointer;

function GetSystemPaletteUse;
begin
GetProcedureAddress(_GetSystemPaletteUse, gdi32, ''GetSystemPaletteUse'');
asm
mov esp, ebp
pop ebp
jmp [_GetSystemPaletteUse]
end;
end;
{$ELSE}
function GetSystemPaletteUse; external gdi32 name ''GetSystemPaletteUse'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextCharacterExtra: Pointer;

function GetTextCharacterExtra;
begin
GetProcedureAddress(_GetTextCharacterExtra, gdi32, ''GetTextCharacterExtra'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextCharacterExtra]
end;
end;
{$ELSE}
function GetTextCharacterExtra; external gdi32 name ''GetTextCharacterExtra'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextAlign: Pointer;

function GetTextAlign;
begin
GetProcedureAddress(_GetTextAlign, gdi32, ''GetTextAlign'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextAlign]
end;
end;
{$ELSE}
function GetTextAlign; external gdi32 name ''GetTextAlign'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextColor: Pointer;

function GetTextColor;
begin
GetProcedureAddress(_GetTextColor, gdi32, ''GetTextColor'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextColor]
end;
end;
{$ELSE}
function GetTextColor; external gdi32 name ''GetTextColor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentPointA: Pointer;

function GetTextExtentPointA;
begin
GetProcedureAddress(_GetTextExtentPointA, gdi32, ''GetTextExtentPointA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentPointA]
end;
end;
{$ELSE}
function GetTextExtentPointA; external gdi32 name ''GetTextExtentPointA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentPointW: Pointer;

function GetTextExtentPointW;
begin
GetProcedureAddress(_GetTextExtentPointW, gdi32, ''GetTextExtentPointW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentPointW]
end;
end;
{$ELSE}
function GetTextExtentPointW; external gdi32 name ''GetTextExtentPointW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentPoint: Pointer;

function GetTextExtentPoint;
begin
GetProcedureAddress(_GetTextExtentPoint, gdi32, ''GetTextExtentPointW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentPoint]
end;
end;
{$ELSE}
function GetTextExtentPoint; external gdi32 name ''GetTextExtentPointW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentPoint: Pointer;

function GetTextExtentPoint;
begin
GetProcedureAddress(_GetTextExtentPoint, gdi32, ''GetTextExtentPointA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentPoint]
end;
end;
{$ELSE}
function GetTextExtentPoint; external gdi32 name ''GetTextExtentPointA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentPoint32A: Pointer;

function GetTextExtentPoint32A;
begin
GetProcedureAddress(_GetTextExtentPoint32A, gdi32, ''GetTextExtentPoint32A'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentPoint32A]
end;
end;
{$ELSE}
function GetTextExtentPoint32A; external gdi32 name ''GetTextExtentPoint32A'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentPoint32W: Pointer;

function GetTextExtentPoint32W;
begin
GetProcedureAddress(_GetTextExtentPoint32W, gdi32, ''GetTextExtentPoint32W'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentPoint32W]
end;
end;
{$ELSE}
function GetTextExtentPoint32W; external gdi32 name ''GetTextExtentPoint32W'';
{$ENDIF DYNAMIC_LINK}


{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentPoint32: Pointer;

function GetTextExtentPoint32;
begin
GetProcedureAddress(_GetTextExtentPoint32, gdi32, ''GetTextExtentPoint32W'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentPoint32]
end;
end;
{$ELSE}
function GetTextExtentPoint32; external gdi32 name ''GetTextExtentPoint32W'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentPoint32: Pointer;

function GetTextExtentPoint32;
begin
GetProcedureAddress(_GetTextExtentPoint32, gdi32, ''GetTextExtentPoint32A'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentPoint32]
end;
end;
{$ELSE}
function GetTextExtentPoint32; external gdi32 name ''GetTextExtentPoint32A'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentExPointA: Pointer;

function GetTextExtentExPointA;
begin
GetProcedureAddress(_GetTextExtentExPointA, gdi32, ''GetTextExtentExPointA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentExPointA]
end;
end;
{$ELSE}
function GetTextExtentExPointA; external gdi32 name ''GetTextExtentExPointA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentExPointW: Pointer;

function GetTextExtentExPointW;
begin
GetProcedureAddress(_GetTextExtentExPointW, gdi32, ''GetTextExtentExPointW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentExPointW]
end;
end;
{$ELSE}
function GetTextExtentExPointW; external gdi32 name ''GetTextExtentExPointW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentExPoint: Pointer;

function GetTextExtentExPoint;
begin
GetProcedureAddress(_GetTextExtentExPoint, gdi32, ''GetTextExtentExPointW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentExPoint]
end;
end;
{$ELSE}
function GetTextExtentExPoint; external gdi32 name ''GetTextExtentExPointW'';

{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentExPoint: Pointer;

function GetTextExtentExPoint;
begin
GetProcedureAddress(_GetTextExtentExPoint, gdi32, ''GetTextExtentExPointA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentExPoint]
end;
end;
{$ELSE}
function GetTextExtentExPoint; external gdi32 name ''GetTextExtentExPointA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetTextCharset: Pointer;

function GetTextCharset;
begin
GetProcedureAddress(_GetTextCharset, gdi32, ''GetTextCharset'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextCharset]
end;
end;
{$ELSE}
function GetTextCharset; external gdi32 name ''GetTextCharset'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextCharsetInfo: Pointer;

function GetTextCharsetInfo;
begin
GetProcedureAddress(_GetTextCharsetInfo, gdi32, ''GetTextCharsetInfo'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextCharsetInfo]
end;
end;
{$ELSE}
function GetTextCharsetInfo; external gdi32 name ''GetTextCharsetInfo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TranslateCharsetInfo: Pointer;

function TranslateCharsetInfo;
begin
GetProcedureAddress(_TranslateCharsetInfo, gdi32, ''TranslateCharsetInfo'');
asm
mov esp, ebp
pop ebp
jmp [_TranslateCharsetInfo]
end;
end;
{$ELSE}
function TranslateCharsetInfo; external gdi32 name ''TranslateCharsetInfo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetFontLanguageInfo: Pointer;

function GetFontLanguageInfo;
begin
GetProcedureAddress(_GetFontLanguageInfo, gdi32, ''GetFontLanguageInfo'');
asm
mov esp, ebp
pop ebp
jmp [_GetFontLanguageInfo]
end;
end;
{$ELSE}
function GetFontLanguageInfo; external gdi32 name ''GetFontLanguageInfo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharacterPlacementA: Pointer;

function GetCharacterPlacementA;
begin
GetProcedureAddress(_GetCharacterPlacementA, gdi32, ''GetCharacterPlacementA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharacterPlacementA]
end;
end;
{$ELSE}
function GetCharacterPlacementA; external gdi32 name ''GetCharacterPlacementA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharacterPlacementW: Pointer;

function GetCharacterPlacementW;
begin
GetProcedureAddress(_GetCharacterPlacementW, gdi32, ''GetCharacterPlacementW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharacterPlacementW]
end;
end;
{$ELSE}
function GetCharacterPlacementW; external gdi32 name ''GetCharacterPlacementW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharacterPlacement: Pointer;

function GetCharacterPlacement;


begin
GetProcedureAddress(_GetCharacterPlacement, gdi32, ''GetCharacterPlacementW'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharacterPlacement]
end;
end;
{$ELSE}
function GetCharacterPlacement; external gdi32 name ''GetCharacterPlacementW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetCharacterPlacement: Pointer;

function GetCharacterPlacement;
begin
GetProcedureAddress(_GetCharacterPlacement, gdi32, ''GetCharacterPlacementA'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharacterPlacement]
end;
end;
{$ELSE}
function GetCharacterPlacement; external gdi32 name ''GetCharacterPlacementA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetFontUnicodeRanges: Pointer;

function GetFontUnicodeRanges;
begin
GetProcedureAddress(_GetFontUnicodeRanges, gdi32, ''GetFontUnicodeRanges'');
asm
mov esp, ebp
pop ebp
jmp [_GetFontUnicodeRanges]

end;
end;
{$ELSE}
function GetFontUnicodeRanges; external gdi32 name ''GetFontUnicodeRanges'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetGlyphIndicesA: Pointer;

function GetGlyphIndicesA;
begin
GetProcedureAddress(_GetGlyphIndicesA, gdi32, ''GetGlyphIndicesA'');
asm
mov esp, ebp
pop ebp
jmp [_GetGlyphIndicesA]
end;
end;
{$ELSE}
function GetGlyphIndicesA; external gdi32 name ''GetGlyphIndicesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetGlyphIndicesW: Pointer;

function GetGlyphIndicesW;
begin
GetProcedureAddress(_GetGlyphIndicesW, gdi32, ''GetGlyphIndicesW'');
asm
mov esp, ebp
pop ebp
jmp [_GetGlyphIndicesW]
end;
end;
{$ELSE}
function GetGlyphIndicesW; external gdi32 name ''GetGlyphIndicesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetGlyphIndices: Pointer;

function GetGlyphIndices;
begin
GetProcedureAddress(_GetGlyphIndices, gdi32, ''GetGlyphIndicesW'');
asm
mov esp, ebp
pop ebp
jmp [_GetGlyphIndices]
end;
end;
{$ELSE}
function GetGlyphIndices; external gdi32 name ''GetGlyphIndicesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetGlyphIndices: Pointer;

function GetGlyphIndices;
begin
GetProcedureAddress(_GetGlyphIndices, gdi32, ''GetGlyphIndicesA'');
asm
mov esp, ebp
pop ebp
jmp [_GetGlyphIndices]
end;
end;
{$ELSE}
function GetGlyphIndices; external gdi32 name ''GetGlyphIndicesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentPointI: Pointer;

function GetTextExtentPointI;
begin
GetProcedureAddress(_GetTextExtentPointI, gdi32, ''GetTextExtentPointI'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentPointI]
end;
end;
{$ELSE}
function GetTextExtentPointI; external gdi32 name ''GetTextExtentPointI'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextExtentExPointI: Pointer;

function GetTextExtentExPointI;
begin
GetProcedureAddress(_GetTextExtentExPointI, gdi32, ''GetTextExtentExPointI'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextExtentExPointI]
end;
end;
{$ELSE}
function GetTextExtentExPointI; external gdi32 name ''GetTextExtentExPointI'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharWidthI: Pointer;

function GetCharWidthI;
begin
GetProcedureAddress(_GetCharWidthI, gdi32, ''GetCharWidthI'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharWidthI]
end;
end;
{$ELSE}
function GetCharWidthI; external gdi32 name ''GetCharWidthI'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetCharABCWidthsI: Pointer;

function GetCharABCWidthsI;
begin
GetProcedureAddress(_GetCharABCWidthsI, gdi32, ''GetCharABCWidthsI'');
asm
mov esp, ebp
pop ebp
jmp [_GetCharABCWidthsI]
end;
end;
{$ELSE}
function GetCharABCWidthsI; external gdi32 name ''GetCharABCWidthsI'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddFontResourceExA: Pointer;

function AddFontResourceExA;
begin
GetProcedureAddress(_AddFontResourceExA, gdi32, ''AddFontResourceExA'');
asm
mov esp, ebp
pop ebp
jmp [_AddFontResourceExA]
end;
end;
{$ELSE}
function AddFontResourceExA; external gdi32 name ''AddFontResourceExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AddFontResourceExW: Pointer;

function AddFontResourceExW;
begin
GetProcedureAddress(_AddFontResourceExW, gdi32, ''AddFontResourceExW'');
asm
mov esp, ebp
pop ebp
jmp [_AddFontResourceExW]
end;
end;
{$ELSE}
function AddFontResourceExW; external gdi32 name ''AddFontResourceExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_AddFontResourceEx: Pointer;

function AddFontResourceEx;
begin
GetProcedureAddress(_AddFontResourceEx, gdi32, ''AddFontResourceExW'');
asm
mov esp, ebp
pop ebp
jmp [_AddFontResourceEx]
end;
end;
{$ELSE}
function AddFontResourceEx; external gdi32 name ''AddFontResourceExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_AddFontResourceEx: Pointer;

function AddFontResourceEx;
begin
GetProcedureAddress(_AddFontResourceEx, gdi32, ''AddFontResourceExA'');
asm
mov esp, ebp
pop ebp
jmp [_AddFontResourceEx]
end;
end;
{$ELSE}
function AddFontResourceEx; external gdi32 name ''AddFontResourceExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_RemoveFontResourceExA: Pointer;

function RemoveFontResourceExA;
begin
GetProcedureAddress(_RemoveFontResourceExA, gdi32, ''RemoveFontResourceExA'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveFontResourceExA]
end;
end;
{$ELSE}
function RemoveFontResourceExA; external gdi32 name ''RemoveFontResourceExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RemoveFontResourceExW: Pointer;

function RemoveFontResourceExW;
begin
GetProcedureAddress(_RemoveFontResourceExW, gdi32, ''RemoveFontResourceExW'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveFontResourceExW]
end;
end;
{$ELSE}
function RemoveFontResourceExW; external gdi32 name ''RemoveFontResourceExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_RemoveFontResourceEx: Pointer;

function RemoveFontResourceEx;
begin
GetProcedureAddress(_RemoveFontResourceEx, gdi32, ''RemoveFontResourceExW'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveFontResourceEx]
end;
end;
{$ELSE}
function RemoveFontResourceEx; external gdi32 name ''RemoveFontResourceExW'';

{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_RemoveFontResourceEx: Pointer;

function RemoveFontResourceEx;
begin
GetProcedureAddress(_RemoveFontResourceEx, gdi32, ''RemoveFontResourceExA'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveFontResourceEx]
end;
end;
{$ELSE}
function RemoveFontResourceEx; external gdi32 name ''RemoveFontResourceExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AddFontMemResourceEx: Pointer;

function AddFontMemResourceEx;
begin
GetProcedureAddress(_AddFontMemResourceEx, gdi32, ''AddFontMemResourceEx'');
asm
mov esp, ebp
pop ebp
jmp [_AddFontMemResourceEx]
end;
end;
{$ELSE}
function AddFontMemResourceEx; external gdi32 name ''AddFontMemResourceEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RemoveFontMemResourceEx: Pointer;

function RemoveFontMemResourceEx;
begin
GetProcedureAddress(_RemoveFontMemResourceEx, gdi32, ''RemoveFontMemResourceEx'');

asm
mov esp, ebp
pop ebp
jmp [_RemoveFontMemResourceEx]
end;
end;
{$ELSE}
function RemoveFontMemResourceEx; external gdi32 name ''RemoveFontMemResourceEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontIndirectExA: Pointer;

function CreateFontIndirectExA;
begin
GetProcedureAddress(_CreateFontIndirectExA, gdi32, ''CreateFontIndirectExA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontIndirectExA]
end;
end;
{$ELSE}
function CreateFontIndirectExA; external gdi32 name ''CreateFontIndirectExA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontIndirectExW: Pointer;

function CreateFontIndirectExW;
begin
GetProcedureAddress(_CreateFontIndirectExW, gdi32, ''CreateFontIndirectExW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontIndirectExW]
end;
end;
{$ELSE}
function CreateFontIndirectExW; external gdi32 name ''CreateFontIndirectExW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontIndirectEx: Pointer;

function CreateFontIndirectEx;
begin
GetProcedureAddress(_CreateFontIndirectEx, gdi32, ''CreateFontIndirectExW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontIndirectEx]
end;
end;
{$ELSE}
function CreateFontIndirectEx; external gdi32 name ''CreateFontIndirectExW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateFontIndirectEx: Pointer;

function CreateFontIndirectEx;
begin
GetProcedureAddress(_CreateFontIndirectEx, gdi32, ''CreateFontIndirectExA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateFontIndirectEx]
end;
end;
{$ELSE}
function CreateFontIndirectEx; external gdi32 name ''CreateFontIndirectExA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetViewportExtEx: Pointer;

function GetViewportExtEx;
begin


GetProcedureAddress(_GetViewportExtEx, gdi32, ''GetViewportExtEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetViewportExtEx]
end;
end;
{$ELSE}
function GetViewportExtEx; external gdi32 name ''GetViewportExtEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetViewportOrgEx: Pointer;

function GetViewportOrgEx;
begin
GetProcedureAddress(_GetViewportOrgEx, gdi32, ''GetViewportOrgEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetViewportOrgEx]
end;
end;
{$ELSE}
function GetViewportOrgEx; external gdi32 name ''GetViewportOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetWindowExtEx: Pointer;

function GetWindowExtEx;
begin
GetProcedureAddress(_GetWindowExtEx, gdi32, ''GetWindowExtEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetWindowExtEx]
end;
end;
{$ELSE}
function GetWindowExtEx; external gdi32 name ''GetWindowExtEx'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetWindowOrgEx: Pointer;

function GetWindowOrgEx;
begin
GetProcedureAddress(_GetWindowOrgEx, gdi32, ''GetWindowOrgEx'');
asm
mov esp, ebp
pop ebp
jmp [_GetWindowOrgEx]
end;
end;
{$ELSE}
function GetWindowOrgEx; external gdi32 name ''GetWindowOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_IntersectClipRect: Pointer;

function IntersectClipRect;
begin
GetProcedureAddress(_IntersectClipRect, gdi32, ''IntersectClipRect'');
asm
mov esp, ebp
pop ebp
jmp [_IntersectClipRect]
end;
end;
{$ELSE}
function IntersectClipRect; external gdi32 name ''IntersectClipRect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_InvertRgn: Pointer;

function InvertRgn;
begin
GetProcedureAddress(_InvertRgn, gdi32, ''InvertRgn'');
asm
mov esp, ebp
pop ebp
jmp [_InvertRgn]


end;
end;
{$ELSE}
function InvertRgn; external gdi32 name ''InvertRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LineDDA: Pointer;

function LineDDA;
begin
GetProcedureAddress(_LineDDA, gdi32, ''LineDDA'');
asm
mov esp, ebp
pop ebp
jmp [_LineDDA]
end;
end;
{$ELSE}
function LineDDA; external gdi32 name ''LineDDA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LineTo: Pointer;

function LineTo;
begin
GetProcedureAddress(_LineTo, gdi32, ''LineTo'');
asm
mov esp, ebp
pop ebp
jmp [_LineTo]
end;
end;
{$ELSE}
function LineTo; external gdi32 name ''LineTo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_MaskBlt: Pointer;

function MaskBlt;
begin
GetProcedureAddress(_MaskBlt, gdi32, ''MaskBlt'');
asm
mov esp, ebp
pop ebp
jmp [_MaskBlt]
end;
end;
{$ELSE}
function MaskBlt; external gdi32 name ''MaskBlt'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PlgBlt: Pointer;

function PlgBlt;
begin
GetProcedureAddress(_PlgBlt, gdi32, ''PlgBlt'');
asm
mov esp, ebp
pop ebp
jmp [_PlgBlt]
end;
end;
{$ELSE}
function PlgBlt; external gdi32 name ''PlgBlt'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OffsetClipRgn: Pointer;

function OffsetClipRgn;
begin
GetProcedureAddress(_OffsetClipRgn, gdi32, ''OffsetClipRgn'');
asm
mov esp, ebp
pop ebp
jmp [_OffsetClipRgn]
end;
end;
{$ELSE}
function OffsetClipRgn; external gdi32 name ''OffsetClipRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OffsetRgn: Pointer;

function OffsetRgn;
begin
GetProcedureAddress(_OffsetRgn, gdi32, ''OffsetRgn'');
asm
mov esp, ebp
pop ebp
jmp [_OffsetRgn]
end;
end;
{$ELSE}
function OffsetRgn; external gdi32 name ''OffsetRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PatBlt: Pointer;

function PatBlt;
begin
GetProcedureAddress(_PatBlt, gdi32, ''PatBlt'');
asm
mov esp, ebp
pop ebp
jmp [_PatBlt]
end;
end;
{$ELSE}
function PatBlt; external gdi32 name ''PatBlt'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Pie: Pointer;

function Pie;
begin
GetProcedureAddress(_Pie, gdi32, ''Pie'');
asm
mov esp, ebp
pop ebp
jmp [_Pie]
end;
end;
{$ELSE}
function Pie; external gdi32 name ''Pie'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PlayMetaFile: Pointer;

function PlayMetaFile;
begin
GetProcedureAddress(_PlayMetaFile, gdi32, ''PlayMetaFile'');
asm
mov esp, ebp
pop ebp
jmp [_PlayMetaFile]
end;
end;
{$ELSE}
function PlayMetaFile; external gdi32 name ''PlayMetaFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PaintRgn: Pointer;

function PaintRgn;
begin
GetProcedureAddress(_PaintRgn, gdi32, ''PaintRgn'');
asm
mov esp, ebp
pop ebp
jmp [_PaintRgn]
end;
end;
{$ELSE}
function PaintRgn; external gdi32 name ''PaintRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PolyPolygon: Pointer;

function PolyPolygon;
begin
GetProcedureAddress(_PolyPolygon, gdi32, ''PolyPolygon'');
asm
mov esp, ebp
pop ebp
jmp [_PolyPolygon]
end;
end;
{$ELSE}
function PolyPolygon; external gdi32 name ''PolyPolygon'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PtInRegion: Pointer;

function PtInRegion;
begin
GetProcedureAddress(_PtInRegion, gdi32, ''PtInRegion'');
asm
mov esp, ebp
pop ebp
jmp [_PtInRegion]
end;
end;
{$ELSE}
function PtInRegion; external gdi32 name ''PtInRegion'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PtVisible: Pointer;

function PtVisible;
begin
GetProcedureAddress(_PtVisible, gdi32, ''PtVisible'');
asm
mov esp, ebp
pop ebp
jmp [_PtVisible]
end;
end;
{$ELSE}
function PtVisible; external gdi32 name ''PtVisible'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RectInRegion: Pointer;

function RectInRegion;
begin
GetProcedureAddress(_RectInRegion, gdi32, ''RectInRegion'');
asm
mov esp, ebp
pop ebp
jmp [_RectInRegion]
end;
end;
{$ELSE}
function RectInRegion; external gdi32 name ''RectInRegion'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RectVisible: Pointer;

function RectVisible;
begin
GetProcedureAddress(_RectVisible, gdi32, ''RectVisible'');
asm
mov esp, ebp
pop ebp
jmp [_RectVisible]
end;
end;
{$ELSE}
function RectVisible; external gdi32 name ''RectVisible'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Rectangle: Pointer;

function Rectangle;
begin
GetProcedureAddress(_Rectangle, gdi32, ''Rectangle'');
asm
mov esp, ebp
pop ebp
jmp [_Rectangle]
end;
end;
{$ELSE}
function Rectangle; external gdi32 name ''Rectangle'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RestoreDC: Pointer;

function RestoreDC;
begin
GetProcedureAddress(_RestoreDC, gdi32, ''RestoreDC'');
asm
mov esp, ebp
pop ebp
jmp [_RestoreDC]
end;
end;
{$ELSE}
function RestoreDC; external gdi32 name ''RestoreDC'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ResetDCA: Pointer;

function ResetDCA;
begin
GetProcedureAddress(_ResetDCA, gdi32, ''ResetDCA'');
asm
mov esp, ebp
pop ebp
jmp [_ResetDCA]
end;
end;
{$ELSE}
function ResetDCA; external gdi32 name ''ResetDCA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ResetDCW: Pointer;

function ResetDCW;
begin
GetProcedureAddress(_ResetDCW, gdi32, ''ResetDCW'');
asm
mov esp, ebp
pop ebp
jmp [_ResetDCW]
end;
end;
{$ELSE}
function ResetDCW; external gdi32 name ''ResetDCW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ResetDC: Pointer;

function ResetDC;
begin
GetProcedureAddress(_ResetDC, gdi32, ''ResetDCW'');
asm
mov esp, ebp
pop ebp
jmp [_ResetDC]
end;
end;
{$ELSE}
function ResetDC; external gdi32 name ''ResetDCW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ResetDC: Pointer;

function ResetDC;
begin
GetProcedureAddress(_ResetDC, gdi32, ''ResetDCA'');
asm
mov esp, ebp
pop ebp
jmp [_ResetDC]
end;
end;
{$ELSE}
function ResetDC; external gdi32 name ''ResetDCA'';

{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_RealizePalette: Pointer;

function RealizePalette;
begin
GetProcedureAddress(_RealizePalette, gdi32, ''RealizePalette'');
asm
mov esp, ebp
pop ebp
jmp [_RealizePalette]
end;
end;
{$ELSE}
function RealizePalette; external gdi32 name ''RealizePalette'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RemoveFontResourceA: Pointer;

function RemoveFontResourceA;
begin
GetProcedureAddress(_RemoveFontResourceA, gdi32, ''RemoveFontResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveFontResourceA]
end;
end;
{$ELSE}
function RemoveFontResourceA; external gdi32 name ''RemoveFontResourceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_RemoveFontResourceW: Pointer;

function RemoveFontResourceW;
begin
GetProcedureAddress(_RemoveFontResourceW, gdi32, ''RemoveFontResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveFontResourceW]
end;
end;
{$ELSE}
function RemoveFontResourceW; external gdi32 name ''RemoveFontResourceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_RemoveFontResource: Pointer;

function RemoveFontResource;
begin
GetProcedureAddress(_RemoveFontResource, gdi32, ''RemoveFontResourceW'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveFontResource]
end;
end;
{$ELSE}
function RemoveFontResource; external gdi32 name ''RemoveFontResourceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_RemoveFontResource: Pointer;

function RemoveFontResource;
begin
GetProcedureAddress(_RemoveFontResource, gdi32, ''RemoveFontResourceA'');
asm
mov esp, ebp
pop ebp
jmp [_RemoveFontResource]
end;
end;
{$ELSE}
function RemoveFontResource; external gdi32 name ''RemoveFontResourceA'';

{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_RoundRect: Pointer;

function RoundRect;
begin
GetProcedureAddress(_RoundRect, gdi32, ''RoundRect'');
asm
mov esp, ebp
pop ebp
jmp [_RoundRect]
end;
end;
{$ELSE}
function RoundRect; external gdi32 name ''RoundRect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ResizePalette: Pointer;

function ResizePalette;
begin
GetProcedureAddress(_ResizePalette, gdi32, ''ResizePalette'');
asm
mov esp, ebp
pop ebp
jmp [_ResizePalette]
end;
end;
{$ELSE}
function ResizePalette; external gdi32 name ''ResizePalette'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SaveDC: Pointer;

function SaveDC;
begin
GetProcedureAddress(_SaveDC, gdi32, ''SaveDC'');
asm
mov esp, ebp
pop ebp
jmp [_SaveDC]
end;
end;
{$ELSE}
function SaveDC; external gdi32 name ''SaveDC'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SelectClipRgn: Pointer;

function SelectClipRgn;
begin
GetProcedureAddress(_SelectClipRgn, gdi32, ''SelectClipRgn'');
asm
mov esp, ebp
pop ebp
jmp [_SelectClipRgn]
end;
end;
{$ELSE}
function SelectClipRgn; external gdi32 name ''SelectClipRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExtSelectClipRgn: Pointer;

function ExtSelectClipRgn;
begin
GetProcedureAddress(_ExtSelectClipRgn, gdi32, ''ExtSelectClipRgn'');
asm
mov esp, ebp
pop ebp
jmp [_ExtSelectClipRgn]
end;
end;
{$ELSE}
function ExtSelectClipRgn; external gdi32 name ''ExtSelectClipRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetMetaRgn: Pointer;

function SetMetaRgn;
begin
GetProcedureAddress(_SetMetaRgn, gdi32, ''SetMetaRgn'');
asm
mov esp, ebp
pop ebp
jmp [_SetMetaRgn]

end;
end;
{$ELSE}
function SetMetaRgn; external gdi32 name ''SetMetaRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SelectObject: Pointer;

function SelectObject;
begin
GetProcedureAddress(_SelectObject, gdi32, ''SelectObject'');
asm
mov esp, ebp
pop ebp
jmp [_SelectObject]
end;
end;
{$ELSE}
function SelectObject; external gdi32 name ''SelectObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SelectPalette: Pointer;

function SelectPalette;
begin
GetProcedureAddress(_SelectPalette, gdi32, ''SelectPalette'');
asm
mov esp, ebp
pop ebp
jmp [_SelectPalette]
end;
end;
{$ELSE}
function SelectPalette; external gdi32 name ''SelectPalette'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetBkColor: Pointer;

function SetBkColor;
begin
GetProcedureAddress(_SetBkColor, gdi32, ''SetBkColor'');
asm
mov esp, ebp
pop ebp
jmp [_SetBkColor]
end;
end;
{$ELSE}
function SetBkColor; external gdi32 name ''SetBkColor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetDCBrushColor: Pointer;

function SetDCBrushColor;
begin
GetProcedureAddress(_SetDCBrushColor, gdi32, ''SetDCBrushColor'');
asm
mov esp, ebp
pop ebp
jmp [_SetDCBrushColor]
end;
end;
{$ELSE}
function SetDCBrushColor; external gdi32 name ''SetDCBrushColor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetDCPenColor: Pointer;

function SetDCPenColor;
begin
GetProcedureAddress(_SetDCPenColor, gdi32, ''SetDCPenColor'');
asm
mov esp, ebp
pop ebp
jmp [_SetDCPenColor]
end;
end;
{$ELSE}
function SetDCPenColor; external gdi32 name ''SetDCPenColor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetBkMode: Pointer;

function SetBkMode;


begin
GetProcedureAddress(_SetBkMode, gdi32, ''SetBkMode'');
asm
mov esp, ebp
pop ebp
jmp [_SetBkMode]
end;
end;
{$ELSE}
function SetBkMode; external gdi32 name ''SetBkMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetBitmapBits: Pointer;

function SetBitmapBits;
begin
GetProcedureAddress(_SetBitmapBits, gdi32, ''SetBitmapBits'');
asm
mov esp, ebp
pop ebp
jmp [_SetBitmapBits]
end;
end;
{$ELSE}
function SetBitmapBits; external gdi32 name ''SetBitmapBits'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetBoundsRect: Pointer;

function SetBoundsRect;
begin
GetProcedureAddress(_SetBoundsRect, gdi32, ''SetBoundsRect'');
asm
mov esp, ebp
pop ebp
jmp [_SetBoundsRect]
end;
end;
{$ELSE}
function SetBoundsRect; external gdi32 name ''SetBoundsRect'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetDIBits: Pointer;

function SetDIBits;
begin
GetProcedureAddress(_SetDIBits, gdi32, ''SetDIBits'');
asm
mov esp, ebp
pop ebp
jmp [_SetDIBits]
end;
end;
{$ELSE}
function SetDIBits; external gdi32 name ''SetDIBits'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetDIBitsToDevice: Pointer;

function SetDIBitsToDevice;
begin
GetProcedureAddress(_SetDIBitsToDevice, gdi32, ''SetDIBitsToDevice'');
asm
mov esp, ebp
pop ebp
jmp [_SetDIBitsToDevice]
end;
end;
{$ELSE}
function SetDIBitsToDevice; external gdi32 name ''SetDIBitsToDevice'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetMapperFlags: Pointer;

function SetMapperFlags;
begin
GetProcedureAddress(_SetMapperFlags, gdi32, ''SetMapperFlags'');
asm
mov esp, ebp
pop ebp
jmp [_SetMapperFlags]
end;
end;
{$ELSE}
function SetMapperFlags; external gdi32 name ''SetMapperFlags'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetGraphicsMode: Pointer;

function SetGraphicsMode;
begin
GetProcedureAddress(_SetGraphicsMode, gdi32, ''SetGraphicsMode'');
asm
mov esp, ebp
pop ebp
jmp [_SetGraphicsMode]
end;
end;
{$ELSE}
function SetGraphicsMode; external gdi32 name ''SetGraphicsMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetMapMode: Pointer;

function SetMapMode;
begin
GetProcedureAddress(_SetMapMode, gdi32, ''SetMapMode'');
asm
mov esp, ebp
pop ebp
jmp [_SetMapMode]
end;
end;
{$ELSE}
function SetMapMode; external gdi32 name ''SetMapMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetLayout: Pointer;

function SetLayout;
begin
GetProcedureAddress(_SetLayout, gdi32, ''SetLayout'');
asm
mov esp, ebp
pop ebp
jmp [_SetLayout]
end;
end;
{$ELSE}


function SetLayout; external gdi32 name ''SetLayout'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLayout: Pointer;

function GetLayout;
begin
GetProcedureAddress(_GetLayout, gdi32, ''GetLayout'');
asm
mov esp, ebp
pop ebp
jmp [_GetLayout]
end;
end;
{$ELSE}
function GetLayout; external gdi32 name ''GetLayout'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetMetaFileBitsEx: Pointer;

function SetMetaFileBitsEx;
begin
GetProcedureAddress(_SetMetaFileBitsEx, gdi32, ''SetMetaFileBitsEx'');
asm
mov esp, ebp
pop ebp
jmp [_SetMetaFileBitsEx]
end;
end;
{$ELSE}
function SetMetaFileBitsEx; external gdi32 name ''SetMetaFileBitsEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetPaletteEntries: Pointer;

function SetPaletteEntries;
begin
GetProcedureAddress(_SetPaletteEntries, gdi32, ''SetPaletteEntries'');


asm
mov esp, ebp
pop ebp
jmp [_SetPaletteEntries]
end;
end;
{$ELSE}
function SetPaletteEntries; external gdi32 name ''SetPaletteEntries'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetPixel: Pointer;

function SetPixel;
begin
GetProcedureAddress(_SetPixel, gdi32, ''SetPixel'');
asm
mov esp, ebp
pop ebp
jmp [_SetPixel]
end;
end;
{$ELSE}
function SetPixel; external gdi32 name ''SetPixel'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetPixelV: Pointer;

function SetPixelV;
begin
GetProcedureAddress(_SetPixelV, gdi32, ''SetPixelV'');
asm
mov esp, ebp
pop ebp
jmp [_SetPixelV]
end;
end;
{$ELSE}
function SetPixelV; external gdi32 name ''SetPixelV'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetPixelFormat: Pointer;

function SetPixelFormat;
begin
GetProcedureAddress(_SetPixelFormat, gdi32, ''SetPixelFormat'');

asm
mov esp, ebp
pop ebp
jmp [_SetPixelFormat]
end;
end;
{$ELSE}
function SetPixelFormat; external gdi32 name ''SetPixelFormat'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetPolyFillMode: Pointer;

function SetPolyFillMode;
begin
GetProcedureAddress(_SetPolyFillMode, gdi32, ''SetPolyFillMode'');
asm
mov esp, ebp
pop ebp
jmp [_SetPolyFillMode]
end;
end;
{$ELSE}
function SetPolyFillMode; external gdi32 name ''SetPolyFillMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_StretchBlt: Pointer;

function StretchBlt;
begin
GetProcedureAddress(_StretchBlt, gdi32, ''StretchBlt'');
asm
mov esp, ebp
pop ebp
jmp [_StretchBlt]
end;
end;
{$ELSE}
function StretchBlt; external gdi32 name ''StretchBlt'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetRectRgn: Pointer;

function SetRectRgn;
begin
GetProcedureAddress(_SetRectRgn, gdi32, ''SetRectRgn'');
asm
mov esp, ebp
pop ebp
jmp [_SetRectRgn]
end;
end;
{$ELSE}
function SetRectRgn; external gdi32 name ''SetRectRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_StretchDIBits: Pointer;

function StretchDIBits;
begin
GetProcedureAddress(_StretchDIBits, gdi32, ''StretchDIBits'');
asm
mov esp, ebp
pop ebp
jmp [_StretchDIBits]
end;
end;
{$ELSE}
function StretchDIBits; external gdi32 name ''StretchDIBits'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetROP2: Pointer;

function SetROP2;
begin
GetProcedureAddress(_SetROP2, gdi32, ''SetROP2'');
asm
mov esp, ebp
pop ebp
jmp [_SetROP2]
end;
end;
{$ELSE}
function SetROP2; external gdi32 name ''SetROP2'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetStretchBltMode: Pointer;

function SetStretchBltMode;
begin
GetProcedureAddress(_SetStretchBltMode, gdi32, ''SetStretchBltMode'');
asm
mov esp, ebp
pop ebp
jmp [_SetStretchBltMode]
end;
end;
{$ELSE}
function SetStretchBltMode; external gdi32 name ''SetStretchBltMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetSystemPaletteUse: Pointer;

function SetSystemPaletteUse;
begin
GetProcedureAddress(_SetSystemPaletteUse, gdi32, ''SetSystemPaletteUse'');
asm
mov esp, ebp
pop ebp
jmp [_SetSystemPaletteUse]
end;
end;
{$ELSE}
function SetSystemPaletteUse; external gdi32 name ''SetSystemPaletteUse'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetTextCharacterExtra: Pointer;

function SetTextCharacterExtra;
begin
GetProcedureAddress(_SetTextCharacterExtra, gdi32, ''SetTextCharacterExtra'');
asm
mov esp, ebp
pop ebp
jmp [_SetTextCharacterExtra]
end;
end;
{$ELSE}
function SetTextCharacterExtra; external gdi32 name ''SetTextCharacterExtra'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetTextColor: Pointer;

function SetTextColor;
begin
GetProcedureAddress(_SetTextColor, gdi32, ''SetTextColor'');
asm
mov esp, ebp
pop ebp
jmp [_SetTextColor]
end;
end;
{$ELSE}
function SetTextColor; external gdi32 name ''SetTextColor'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetTextAlign: Pointer;

function SetTextAlign;
begin
GetProcedureAddress(_SetTextAlign, gdi32, ''SetTextAlign'');
asm
mov esp, ebp
pop ebp
jmp [_SetTextAlign]
end;
end;
{$ELSE}
function SetTextAlign; external gdi32 name ''SetTextAlign'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetTextJustification: Pointer;

function SetTextJustification;
begin
GetProcedureAddress(_SetTextJustification, gdi32, ''SetTextJustification'');
asm
mov esp, ebp
pop ebp
jmp [_SetTextJustification]
end;
end;
{$ELSE}
function SetTextJustification; external gdi32 name ''SetTextJustification'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UpdateColors: Pointer;

function UpdateColors;
begin
GetProcedureAddress(_UpdateColors, gdi32, ''UpdateColors'');
asm
mov esp, ebp
pop ebp
jmp [_UpdateColors]
end;
end;
{$ELSE}
function UpdateColors; external gdi32 name ''UpdateColors'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AlphaBlend: Pointer;

function AlphaBlend;
begin
GetProcedureAddress(_AlphaBlend, msimg32, ''AlphaBlend'');
asm
mov esp, ebp
pop ebp
jmp [_AlphaBlend]
end;
end;
{$ELSE}
function AlphaBlend; external msimg32 name ''AlphaBlend'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TransparentBlt: Pointer;

function TransparentBlt;
begin
GetProcedureAddress(_TransparentBlt, msimg32, ''TransparentBlt'');
asm
mov esp, ebp
pop ebp
jmp [_TransparentBlt]
end;
end;
{$ELSE}
function TransparentBlt; external msimg32 name ''TransparentBlt'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GradientFill: Pointer;

function GradientFill;
begin
GetProcedureAddress(_GradientFill, msimg32, ''GradientFill'');
asm
mov esp, ebp
pop ebp
jmp [_GradientFill]
end;
end;
{$ELSE}
function GradientFill; external msimg32 name ''GradientFill'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PlayMetaFileRecord: Pointer;

function PlayMetaFileRecord;
begin
GetProcedureAddress(_PlayMetaFileRecord, gdi32, ''PlayMetaFileRecord'');
asm
mov esp, ebp
pop ebp
jmp [_PlayMetaFileRecord]
end;
end;
{$ELSE}
function PlayMetaFileRecord; external gdi32 name ''PlayMetaFileRecord'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumMetaFile: Pointer;

function EnumMetaFile;
begin
GetProcedureAddress(_EnumMetaFile, gdi32, ''EnumMetaFile'');
asm
mov esp, ebp
pop ebp
jmp [_EnumMetaFile]
end;
end;
{$ELSE}
function EnumMetaFile; external gdi32 name ''EnumMetaFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CloseEnhMetaFile: Pointer;

function CloseEnhMetaFile;
begin
GetProcedureAddress(_CloseEnhMetaFile, gdi32, ''CloseEnhMetaFile'');
asm
mov esp, ebp
pop ebp
jmp [_CloseEnhMetaFile]
end;
end;
{$ELSE}
function CloseEnhMetaFile; external gdi32 name ''CloseEnhMetaFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CopyEnhMetaFileA: Pointer;

function CopyEnhMetaFileA;
begin
GetProcedureAddress(_CopyEnhMetaFileA, gdi32, ''CopyEnhMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CopyEnhMetaFileA]

end;
end;
{$ELSE}
function CopyEnhMetaFileA; external gdi32 name ''CopyEnhMetaFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CopyEnhMetaFileW: Pointer;

function CopyEnhMetaFileW;
begin
GetProcedureAddress(_CopyEnhMetaFileW, gdi32, ''CopyEnhMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CopyEnhMetaFileW]
end;
end;
{$ELSE}
function CopyEnhMetaFileW; external gdi32 name ''CopyEnhMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CopyEnhMetaFile: Pointer;

function CopyEnhMetaFile;
begin
GetProcedureAddress(_CopyEnhMetaFile, gdi32, ''CopyEnhMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CopyEnhMetaFile]
end;
end;
{$ELSE}
function CopyEnhMetaFile; external gdi32 name ''CopyEnhMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CopyEnhMetaFile: Pointer;

function CopyEnhMetaFile;
begin
GetProcedureAddress(_CopyEnhMetaFile, gdi32, ''CopyEnhMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CopyEnhMetaFile]
end;
end;
{$ELSE}
function CopyEnhMetaFile; external gdi32 name ''CopyEnhMetaFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateEnhMetaFileA: Pointer;

function CreateEnhMetaFileA;
begin
GetProcedureAddress(_CreateEnhMetaFileA, gdi32, ''CreateEnhMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEnhMetaFileA]
end;
end;
{$ELSE}
function CreateEnhMetaFileA; external gdi32 name ''CreateEnhMetaFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateEnhMetaFileW: Pointer;

function CreateEnhMetaFileW;
begin
GetProcedureAddress(_CreateEnhMetaFileW, gdi32, ''CreateEnhMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEnhMetaFileW]
end;
end;
{$ELSE}
function CreateEnhMetaFileW; external gdi32 name ''CreateEnhMetaFileW'';

{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateEnhMetaFile: Pointer;

function CreateEnhMetaFile;
begin
GetProcedureAddress(_CreateEnhMetaFile, gdi32, ''CreateEnhMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEnhMetaFile]
end;
end;
{$ELSE}
function CreateEnhMetaFile; external gdi32 name ''CreateEnhMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateEnhMetaFile: Pointer;

function CreateEnhMetaFile;
begin
GetProcedureAddress(_CreateEnhMetaFile, gdi32, ''CreateEnhMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateEnhMetaFile]
end;
end;
{$ELSE}
function CreateEnhMetaFile; external gdi32 name ''CreateEnhMetaFileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_DeleteEnhMetaFile: Pointer;

function DeleteEnhMetaFile;
begin
GetProcedureAddress(_DeleteEnhMetaFile, gdi32, ''DeleteEnhMetaFile'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteEnhMetaFile]
end;
end;
{$ELSE}
function DeleteEnhMetaFile; external gdi32 name ''DeleteEnhMetaFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumEnhMetaFile: Pointer;

function EnumEnhMetaFile;
begin
GetProcedureAddress(_EnumEnhMetaFile, gdi32, ''EnumEnhMetaFile'');
asm
mov esp, ebp
pop ebp
jmp [_EnumEnhMetaFile]
end;
end;
{$ELSE}
function EnumEnhMetaFile; external gdi32 name ''EnumEnhMetaFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFileA: Pointer;

function GetEnhMetaFileA;
begin
GetProcedureAddress(_GetEnhMetaFileA, gdi32, ''GetEnhMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFileA]
end;
end;
{$ELSE}
function GetEnhMetaFileA; external gdi32 name ''GetEnhMetaFileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFileW: Pointer;

function GetEnhMetaFileW;
begin
GetProcedureAddress(_GetEnhMetaFileW, gdi32, ''GetEnhMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFileW]
end;
end;
{$ELSE}
function GetEnhMetaFileW; external gdi32 name ''GetEnhMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFile: Pointer;

function GetEnhMetaFile;
begin
GetProcedureAddress(_GetEnhMetaFile, gdi32, ''GetEnhMetaFileW'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFile]
end;
end;
{$ELSE}
function GetEnhMetaFile; external gdi32 name ''GetEnhMetaFileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFile: Pointer;

function GetEnhMetaFile;
begin
GetProcedureAddress(_GetEnhMetaFile, gdi32, ''GetEnhMetaFileA'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFile]
end;
end;
{$ELSE}
function GetEnhMetaFile; external gdi32 name ''GetEnhMetaFileA'';


{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFileBits: Pointer;

function GetEnhMetaFileBits;
begin
GetProcedureAddress(_GetEnhMetaFileBits, gdi32, ''GetEnhMetaFileBits'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFileBits]
end;
end;
{$ELSE}
function GetEnhMetaFileBits; external gdi32 name ''GetEnhMetaFileBits'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFileDescriptionA: Pointer;

function GetEnhMetaFileDescriptionA;
begin
GetProcedureAddress(_GetEnhMetaFileDescriptionA, gdi32, ''GetEnhMetaFileDescriptionA'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFileDescriptionA]
end;
end;
{$ELSE}
function GetEnhMetaFileDescriptionA; external gdi32 name ''GetEnhMetaFileDescriptionA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFileDescriptionW: Pointer;

function GetEnhMetaFileDescriptionW;

begin
GetProcedureAddress(_GetEnhMetaFileDescriptionW, gdi32, ''GetEnhMetaFileDescriptionW'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFileDescriptionW]
end;
end;
{$ELSE}
function GetEnhMetaFileDescriptionW; external gdi32 name ''GetEnhMetaFileDescriptionW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFileDescription: Pointer;

function GetEnhMetaFileDescription;
begin
GetProcedureAddress(_GetEnhMetaFileDescription, gdi32, ''GetEnhMetaFileDescriptionW'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFileDescription]
end;
end;
{$ELSE}
function GetEnhMetaFileDescription; external gdi32 name ''GetEnhMetaFileDescriptionW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFileDescription: Pointer;

function GetEnhMetaFileDescription;
begin
GetProcedureAddress(_GetEnhMetaFileDescription, gdi32, ''GetEnhMetaFileDescriptionA'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFileDescription]
end;
end;
{$ELSE}
function GetEnhMetaFileDescription; external gdi32 name ''GetEnhMetaFileDescriptionA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFileHeader: Pointer;

function GetEnhMetaFileHeader;
begin
GetProcedureAddress(_GetEnhMetaFileHeader, gdi32, ''GetEnhMetaFileHeader'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFileHeader]
end;
end;
{$ELSE}
function GetEnhMetaFileHeader; external gdi32 name ''GetEnhMetaFileHeader'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFilePaletteEntries: Pointer;

function GetEnhMetaFilePaletteEntries;
begin
GetProcedureAddress(_GetEnhMetaFilePaletteEntries, gdi32, ''GetEnhMetaFilePaletteEntries'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFilePaletteEntries]
end;
end;
{$ELSE}
function GetEnhMetaFilePaletteEntries; external gdi32 name ''GetEnhMetaFilePaletteEntries'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetEnhMetaFilePixelFormat: Pointer;

function GetEnhMetaFilePixelFormat;
begin
GetProcedureAddress(_GetEnhMetaFilePixelFormat, gdi32, ''GetEnhMetaFilePixelFormat'');
asm
mov esp, ebp
pop ebp
jmp [_GetEnhMetaFilePixelFormat]
end;
end;
{$ELSE}
function GetEnhMetaFilePixelFormat; external gdi32 name ''GetEnhMetaFilePixelFormat'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetWinMetaFileBits: Pointer;

function GetWinMetaFileBits;
begin
GetProcedureAddress(_GetWinMetaFileBits, gdi32, ''GetWinMetaFileBits'');
asm
mov esp, ebp
pop ebp
jmp [_GetWinMetaFileBits]
end;
end;
{$ELSE}
function GetWinMetaFileBits; external gdi32 name ''GetWinMetaFileBits'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PlayEnhMetaFile: Pointer;

function PlayEnhMetaFile;
begin
GetProcedureAddress(_PlayEnhMetaFile, gdi32, ''PlayEnhMetaFile'');
asm
mov esp, ebp
pop ebp
jmp [_PlayEnhMetaFile]
end;
end;
{$ELSE}
function PlayEnhMetaFile; external gdi32 name ''PlayEnhMetaFile'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PlayEnhMetaFileRecord: Pointer;

function PlayEnhMetaFileRecord;
begin
GetProcedureAddress(_PlayEnhMetaFileRecord, gdi32, ''PlayEnhMetaFileRecord'');
asm
mov esp, ebp
pop ebp
jmp [_PlayEnhMetaFileRecord]
end;
end;
{$ELSE}
function PlayEnhMetaFileRecord; external gdi32 name ''PlayEnhMetaFileRecord'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetEnhMetaFileBits: Pointer;

function SetEnhMetaFileBits;
begin
GetProcedureAddress(_SetEnhMetaFileBits, gdi32, ''SetEnhMetaFileBits'');
asm
mov esp, ebp
pop ebp
jmp [_SetEnhMetaFileBits]
end;
end;
{$ELSE}
function SetEnhMetaFileBits; external gdi32 name ''SetEnhMetaFileBits'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetWinMetaFileBits: Pointer;

function SetWinMetaFileBits;
begin
GetProcedureAddress(_SetWinMetaFileBits, gdi32, ''SetWinMetaFileBits'');
asm
mov esp, ebp
pop ebp
jmp [_SetWinMetaFileBits]
end;
end;
{$ELSE}
function SetWinMetaFileBits; external gdi32 name ''SetWinMetaFileBits'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GdiComment: Pointer;

function GdiComment;
begin
GetProcedureAddress(_GdiComment, gdi32, ''GdiComment'');
asm
mov esp, ebp
pop ebp
jmp [_GdiComment]
end;
end;
{$ELSE}
function GdiComment; external gdi32 name ''GdiComment'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextMetricsA: Pointer;

function GetTextMetricsA;
begin
GetProcedureAddress(_GetTextMetricsA, gdi32, ''GetTextMetricsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextMetricsA]
end;

end;
{$ELSE}
function GetTextMetricsA; external gdi32 name ''GetTextMetricsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextMetricsW: Pointer;

function GetTextMetricsW;
begin
GetProcedureAddress(_GetTextMetricsW, gdi32, ''GetTextMetricsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextMetricsW]
end;
end;
{$ELSE}
function GetTextMetricsW; external gdi32 name ''GetTextMetricsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextMetrics: Pointer;

function GetTextMetrics;
begin
GetProcedureAddress(_GetTextMetrics, gdi32, ''GetTextMetricsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextMetrics]
end;
end;
{$ELSE}
function GetTextMetrics; external gdi32 name ''GetTextMetricsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextMetrics: Pointer;

function GetTextMetrics;
begin
GetProcedureAddress(_GetTextMetrics, gdi32, ''GetTextMetricsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextMetrics]
end;
end;
{$ELSE}
function GetTextMetrics; external gdi32 name ''GetTextMetricsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_AngleArc: Pointer;

function AngleArc;
begin
GetProcedureAddress(_AngleArc, gdi32, ''AngleArc'');
asm
mov esp, ebp
pop ebp
jmp [_AngleArc]
end;
end;
{$ELSE}
function AngleArc; external gdi32 name ''AngleArc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PolyPolyline: Pointer;

function PolyPolyline;
begin
GetProcedureAddress(_PolyPolyline, gdi32, ''PolyPolyline'');
asm
mov esp, ebp
pop ebp
jmp [_PolyPolyline]
end;
end;
{$ELSE}
function PolyPolyline; external gdi32 name ''PolyPolyline'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var


_GetWorldTransform: Pointer;

function GetWorldTransform;
begin
GetProcedureAddress(_GetWorldTransform, gdi32, ''GetWorldTransform'');
asm
mov esp, ebp
pop ebp
jmp [_GetWorldTransform]
end;
end;
{$ELSE}
function GetWorldTransform; external gdi32 name ''GetWorldTransform'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetWorldTransform: Pointer;

function SetWorldTransform;
begin
GetProcedureAddress(_SetWorldTransform, gdi32, ''SetWorldTransform'');
asm
mov esp, ebp
pop ebp
jmp [_SetWorldTransform]
end;
end;
{$ELSE}
function SetWorldTransform; external gdi32 name ''SetWorldTransform'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ModifyWorldTransform: Pointer;

function ModifyWorldTransform;
begin
GetProcedureAddress(_ModifyWorldTransform, gdi32, ''ModifyWorldTransform'');
asm
mov esp, ebp
pop ebp
jmp [_ModifyWorldTransform]
end;
end;
{$ELSE}
function ModifyWorldTransform; external gdi32 name ''ModifyWorldTransform'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CombineTransform: Pointer;

function CombineTransform;
begin
GetProcedureAddress(_CombineTransform, gdi32, ''CombineTransform'');
asm
mov esp, ebp
pop ebp
jmp [_CombineTransform]
end;
end;
{$ELSE}
function CombineTransform; external gdi32 name ''CombineTransform'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateDIBSection: Pointer;

function CreateDIBSection;
begin
GetProcedureAddress(_CreateDIBSection, gdi32, ''CreateDIBSection'');
asm
mov esp, ebp
pop ebp
jmp [_CreateDIBSection]
end;
end;
{$ELSE}
function CreateDIBSection; external gdi32 name ''CreateDIBSection'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetDIBColorTable: Pointer;

function GetDIBColorTable;
begin
GetProcedureAddress(_GetDIBColorTable, gdi32, ''GetDIBColorTable'');
asm
mov esp, ebp
pop ebp
jmp [_GetDIBColorTable]
end;
end;
{$ELSE}
function GetDIBColorTable; external gdi32 name ''GetDIBColorTable'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetDIBColorTable: Pointer;

function SetDIBColorTable;
begin
GetProcedureAddress(_SetDIBColorTable, gdi32, ''SetDIBColorTable'');
asm
mov esp, ebp
pop ebp
jmp [_SetDIBColorTable]
end;
end;
{$ELSE}
function SetDIBColorTable; external gdi32 name ''SetDIBColorTable'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetColorAdjustment: Pointer;

function SetColorAdjustment;
begin
GetProcedureAddress(_SetColorAdjustment, gdi32, ''SetColorAdjustment'');
asm
mov esp, ebp
pop ebp
jmp [_SetColorAdjustment]
end;
end;
{$ELSE}
function SetColorAdjustment; external gdi32 name ''SetColorAdjustment'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetColorAdjustment: Pointer;

function GetColorAdjustment;
begin
GetProcedureAddress(_GetColorAdjustment, gdi32, ''GetColorAdjustment'');
asm
mov esp, ebp
pop ebp
jmp [_GetColorAdjustment]
end;
end;
{$ELSE}
function GetColorAdjustment; external gdi32 name ''GetColorAdjustment'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateHalftonePalette: Pointer;

function CreateHalftonePalette;
begin
GetProcedureAddress(_CreateHalftonePalette, gdi32, ''CreateHalftonePalette'');
asm
mov esp, ebp
pop ebp
jmp [_CreateHalftonePalette]
end;
end;
{$ELSE}
function CreateHalftonePalette; external gdi32 name ''CreateHalftonePalette'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_StartDocA: Pointer;

function StartDocA;
begin
GetProcedureAddress(_StartDocA, gdi32, ''StartDocA'');


asm
mov esp, ebp
pop ebp
jmp [_StartDocA]
end;
end;
{$ELSE}
function StartDocA; external gdi32 name ''StartDocA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_StartDocW: Pointer;

function StartDocW;
begin
GetProcedureAddress(_StartDocW, gdi32, ''StartDocW'');
asm
mov esp, ebp
pop ebp
jmp [_StartDocW]
end;
end;
{$ELSE}
function StartDocW; external gdi32 name ''StartDocW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_StartDoc: Pointer;

function StartDoc;
begin
GetProcedureAddress(_StartDoc, gdi32, ''StartDocW'');
asm
mov esp, ebp
pop ebp
jmp [_StartDoc]
end;
end;
{$ELSE}
function StartDoc; external gdi32 name ''StartDocW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
__StartDoc: Pointer;

function StartDoc;
begin
GetProcedureAddress(__StartDoc, gdi32, ''StartDocA'');
asm
mov esp, ebp
pop ebp
jmp [__StartDoc]
end;
end;
{$ELSE}
function StartDoc; external gdi32 name ''StartDocA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
__EndDoc: Pointer;

function EndDoc;
begin
GetProcedureAddress(__EndDoc, gdi32, ''EndDoc'');
asm
mov esp, ebp
pop ebp
jmp [__EndDoc]
end;
end;
{$ELSE}
function EndDoc; external gdi32 name ''EndDoc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_StartPage: Pointer;

function StartPage;
begin
GetProcedureAddress(_StartPage, gdi32, ''StartPage'');
asm
mov esp, ebp
pop ebp
jmp [_StartPage]
end;
end;
{$ELSE}
function StartPage; external gdi32 name ''StartPage'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EndPage: Pointer;

function EndPage;
begin
GetProcedureAddress(_EndPage, gdi32, ''EndPage'');
asm


mov esp, ebp
pop ebp
jmp [_EndPage]
end;
end;
{$ELSE}
function EndPage; external gdi32 name ''EndPage'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
__AbortDoc: Pointer;

function AbortDoc;
begin
GetProcedureAddress(__AbortDoc, gdi32, ''AbortDoc'');
asm
mov esp, ebp
pop ebp
jmp [__AbortDoc]
end;
end;
{$ELSE}
function AbortDoc; external gdi32 name ''AbortDoc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetAbortProc: Pointer;

function SetAbortProc;
begin
GetProcedureAddress(_SetAbortProc, gdi32, ''SetAbortProc'');
asm
mov esp, ebp
pop ebp
jmp [_SetAbortProc]
end;
end;
{$ELSE}
function SetAbortProc; external gdi32 name ''SetAbortProc'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_AbortPath: Pointer;

function AbortPath;
begin
GetProcedureAddress(_AbortPath, gdi32, ''AbortPath'');

asm
mov esp, ebp
pop ebp
jmp [_AbortPath]
end;
end;
{$ELSE}
function AbortPath; external gdi32 name ''AbortPath'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ArcTo: Pointer;

function ArcTo;
begin
GetProcedureAddress(_ArcTo, gdi32, ''ArcTo'');
asm
mov esp, ebp
pop ebp
jmp [_ArcTo]
end;
end;
{$ELSE}
function ArcTo; external gdi32 name ''ArcTo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_BeginPath: Pointer;

function BeginPath;
begin
GetProcedureAddress(_BeginPath, gdi32, ''BeginPath'');
asm
mov esp, ebp
pop ebp
jmp [_BeginPath]
end;
end;
{$ELSE}
function BeginPath; external gdi32 name ''BeginPath'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CloseFigure: Pointer;

function CloseFigure;
begin
GetProcedureAddress(_CloseFigure, gdi32, ''CloseFigure'');
asm


mov esp, ebp
pop ebp
jmp [_CloseFigure]
end;
end;
{$ELSE}
function CloseFigure; external gdi32 name ''CloseFigure'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EndPath: Pointer;

function EndPath;
begin
GetProcedureAddress(_EndPath, gdi32, ''EndPath'');
asm
mov esp, ebp
pop ebp
jmp [_EndPath]
end;
end;
{$ELSE}
function EndPath; external gdi32 name ''EndPath'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FillPath: Pointer;

function FillPath;
begin
GetProcedureAddress(_FillPath, gdi32, ''FillPath'');
asm
mov esp, ebp
pop ebp
jmp [_FillPath]
end;
end;
{$ELSE}
function FillPath; external gdi32 name ''FillPath'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FlattenPath: Pointer;

function FlattenPath;
begin
GetProcedureAddress(_FlattenPath, gdi32, ''FlattenPath'');
asm
mov esp, ebp
pop ebp
jmp [_FlattenPath]
end;
end;
{$ELSE}
function FlattenPath; external gdi32 name ''FlattenPath'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetPath: Pointer;

function GetPath;
begin
GetProcedureAddress(_GetPath, gdi32, ''GetPath'');
asm
mov esp, ebp
pop ebp
jmp [_GetPath]
end;
end;
{$ELSE}
function GetPath; external gdi32 name ''GetPath'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PathToRegion: Pointer;

function PathToRegion;
begin
GetProcedureAddress(_PathToRegion, gdi32, ''PathToRegion'');
asm
mov esp, ebp
pop ebp
jmp [_PathToRegion]
end;
end;
{$ELSE}
function PathToRegion; external gdi32 name ''PathToRegion'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PolyDraw: Pointer;

function PolyDraw;
begin
GetProcedureAddress(_PolyDraw, gdi32, ''PolyDraw'');
asm
mov esp, ebp
pop ebp
jmp [_PolyDraw]
end;
end;
{$ELSE}
function PolyDraw; external gdi32 name ''PolyDraw'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SelectClipPath: Pointer;

function SelectClipPath;
begin
GetProcedureAddress(_SelectClipPath, gdi32, ''SelectClipPath'');
asm
mov esp, ebp
pop ebp
jmp [_SelectClipPath]
end;
end;
{$ELSE}
function SelectClipPath; external gdi32 name ''SelectClipPath'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetArcDirection: Pointer;

function SetArcDirection;
begin
GetProcedureAddress(_SetArcDirection, gdi32, ''SetArcDirection'');
asm
mov esp, ebp
pop ebp
jmp [_SetArcDirection]
end;
end;
{$ELSE}
function SetArcDirection; external gdi32 name ''SetArcDirection'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetMiterLimit: Pointer;

function SetMiterLimit;


begin
GetProcedureAddress(_SetMiterLimit, gdi32, ''SetMiterLimit'');
asm
mov esp, ebp
pop ebp
jmp [_SetMiterLimit]
end;
end;
{$ELSE}
function SetMiterLimit; external gdi32 name ''SetMiterLimit'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_StrokeAndFillPath: Pointer;

function StrokeAndFillPath;
begin
GetProcedureAddress(_StrokeAndFillPath, gdi32, ''StrokeAndFillPath'');
asm
mov esp, ebp
pop ebp
jmp [_StrokeAndFillPath]
end;
end;
{$ELSE}
function StrokeAndFillPath; external gdi32 name ''StrokeAndFillPath'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_StrokePath: Pointer;

function StrokePath;
begin
GetProcedureAddress(_StrokePath, gdi32, ''StrokePath'');
asm
mov esp, ebp
pop ebp
jmp [_StrokePath]
end;
end;
{$ELSE}
function StrokePath; external gdi32 name ''StrokePath'';
{$ENDIF DYNAMIC_LINK}


{$IFDEF DYNAMIC_LINK}
var
_WidenPath: Pointer;

function WidenPath;
begin
GetProcedureAddress(_WidenPath, gdi32, ''WidenPath'');
asm
mov esp, ebp
pop ebp
jmp [_WidenPath]
end;
end;
{$ELSE}
function WidenPath; external gdi32 name ''WidenPath'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExtCreatePen: Pointer;

function ExtCreatePen;
begin
GetProcedureAddress(_ExtCreatePen, gdi32, ''ExtCreatePen'');
asm
mov esp, ebp
pop ebp
jmp [_ExtCreatePen]
end;
end;
{$ELSE}
function ExtCreatePen; external gdi32 name ''ExtCreatePen'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetMiterLimit: Pointer;

function GetMiterLimit;
begin
GetProcedureAddress(_GetMiterLimit, gdi32, ''GetMiterLimit'');
asm
mov esp, ebp
pop ebp
jmp [_GetMiterLimit]
end;
end;
{$ELSE}
function GetMiterLimit; external gdi32 name ''GetMiterLimit'';


{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetArcDirection: Pointer;

function GetArcDirection;
begin
GetProcedureAddress(_GetArcDirection, gdi32, ''GetArcDirection'');
asm
mov esp, ebp
pop ebp
jmp [_GetArcDirection]
end;
end;
{$ELSE}
function GetArcDirection; external gdi32 name ''GetArcDirection'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetObjectA: Pointer;

function GetObjectA;
begin
GetProcedureAddress(_GetObjectA, gdi32, ''GetObjectA'');
asm
mov esp, ebp
pop ebp
jmp [_GetObjectA]
end;
end;
{$ELSE}
function GetObjectA; external gdi32 name ''GetObjectA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetObjectW: Pointer;

function GetObjectW;
begin
GetProcedureAddress(_GetObjectW, gdi32, ''GetObjectW'');
asm
mov esp, ebp
pop ebp
jmp [_GetObjectW]
end;
end;
{$ELSE}


function GetObjectW; external gdi32 name ''GetObjectW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetObject: Pointer;

function GetObject;
begin
GetProcedureAddress(_GetObject, gdi32, ''GetObjectW'');
asm
mov esp, ebp
pop ebp
jmp [_GetObject]
end;
end;
{$ELSE}
function GetObject; external gdi32 name ''GetObjectW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetObject: Pointer;

function GetObject;
begin
GetProcedureAddress(_GetObject, gdi32, ''GetObjectA'');
asm
mov esp, ebp
pop ebp
jmp [_GetObject]
end;
end;
{$ELSE}
function GetObject; external gdi32 name ''GetObjectA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_MoveToEx: Pointer;

function MoveToEx;
begin
GetProcedureAddress(_MoveToEx, gdi32, ''MoveToEx'');
asm
mov esp, ebp
pop ebp
jmp [_MoveToEx]
end;
end;
{$ELSE}
function MoveToEx; external gdi32 name ''MoveToEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TextOutA: Pointer;

function TextOutA;
begin
GetProcedureAddress(_TextOutA, gdi32, ''TextOutA'');
asm
mov esp, ebp
pop ebp
jmp [_TextOutA]
end;
end;
{$ELSE}
function TextOutA; external gdi32 name ''TextOutA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_TextOutW: Pointer;

function TextOutW;
begin
GetProcedureAddress(_TextOutW, gdi32, ''TextOutW'');
asm
mov esp, ebp
pop ebp
jmp [_TextOutW]
end;
end;
{$ELSE}
function TextOutW; external gdi32 name ''TextOutW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_TextOut: Pointer;

function TextOut;
begin
GetProcedureAddress(_TextOut, gdi32, ''TextOutW'');
asm
mov esp, ebp
pop ebp


jmp [_TextOut]
end;
end;
{$ELSE}
function TextOut; external gdi32 name ''TextOutW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_TextOut: Pointer;

function TextOut;
begin
GetProcedureAddress(_TextOut, gdi32, ''TextOutA'');
asm
mov esp, ebp
pop ebp
jmp [_TextOut]
end;
end;
{$ELSE}
function TextOut; external gdi32 name ''TextOutA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ExtTextOutA: Pointer;

function ExtTextOutA;
begin
GetProcedureAddress(_ExtTextOutA, gdi32, ''ExtTextOutA'');
asm
mov esp, ebp
pop ebp
jmp [_ExtTextOutA]
end;
end;
{$ELSE}
function ExtTextOutA; external gdi32 name ''ExtTextOutA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ExtTextOutW: Pointer;

function ExtTextOutW;
begin
GetProcedureAddress(_ExtTextOutW, gdi32, ''ExtTextOutW'');
asm


mov esp, ebp
pop ebp
jmp [_ExtTextOutW]
end;
end;
{$ELSE}
function ExtTextOutW; external gdi32 name ''ExtTextOutW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_ExtTextOut: Pointer;

function ExtTextOut;
begin
GetProcedureAddress(_ExtTextOut, gdi32, ''ExtTextOutW'');
asm
mov esp, ebp
pop ebp
jmp [_ExtTextOut]
end;
end;
{$ELSE}
function ExtTextOut; external gdi32 name ''ExtTextOutW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_ExtTextOut: Pointer;

function ExtTextOut;
begin
GetProcedureAddress(_ExtTextOut, gdi32, ''ExtTextOutA'');
asm
mov esp, ebp
pop ebp
jmp [_ExtTextOut]
end;
end;
{$ELSE}
function ExtTextOut; external gdi32 name ''ExtTextOutA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_PolyTextOutA: Pointer;

function PolyTextOutA;

begin
GetProcedureAddress(_PolyTextOutA, gdi32, ''PolyTextOutA'');
asm
mov esp, ebp
pop ebp
jmp [_PolyTextOutA]
end;
end;
{$ELSE}
function PolyTextOutA; external gdi32 name ''PolyTextOutA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PolyTextOutW: Pointer;

function PolyTextOutW;
begin
GetProcedureAddress(_PolyTextOutW, gdi32, ''PolyTextOutW'');
asm
mov esp, ebp
pop ebp
jmp [_PolyTextOutW]
end;
end;
{$ELSE}
function PolyTextOutW; external gdi32 name ''PolyTextOutW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_PolyTextOut: Pointer;

function PolyTextOut;
begin
GetProcedureAddress(_PolyTextOut, gdi32, ''PolyTextOutW'');
asm
mov esp, ebp
pop ebp
jmp [_PolyTextOut]
end;
end;
{$ELSE}
function PolyTextOut; external gdi32 name ''PolyTextOutW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}


{$IFDEF DYNAMIC_LINK}
var
_PolyTextOut: Pointer;

function PolyTextOut;
begin
GetProcedureAddress(_PolyTextOut, gdi32, ''PolyTextOutA'');
asm
mov esp, ebp
pop ebp
jmp [_PolyTextOut]
end;
end;
{$ELSE}
function PolyTextOut; external gdi32 name ''PolyTextOutA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreatePolygonRgn: Pointer;

function CreatePolygonRgn;
begin
GetProcedureAddress(_CreatePolygonRgn, gdi32, ''CreatePolygonRgn'');
asm
mov esp, ebp
pop ebp
jmp [_CreatePolygonRgn]
end;
end;
{$ELSE}
function CreatePolygonRgn; external gdi32 name ''CreatePolygonRgn'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DPtoLP: Pointer;

function DPtoLP;
begin
GetProcedureAddress(_DPtoLP, gdi32, ''DPtoLP'');
asm
mov esp, ebp
pop ebp
jmp [_DPtoLP]
end;
end;
{$ELSE}
function DPtoLP; external gdi32 name ''DPtoLP'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_LPtoDP: Pointer;

function LPtoDP;
begin
GetProcedureAddress(_LPtoDP, gdi32, ''LPtoDP'');
asm
mov esp, ebp
pop ebp
jmp [_LPtoDP]
end;
end;
{$ELSE}
function LPtoDP; external gdi32 name ''LPtoDP'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Polygon: Pointer;

function Polygon;
begin
GetProcedureAddress(_Polygon, gdi32, ''Polygon'');
asm
mov esp, ebp
pop ebp
jmp [_Polygon]
end;
end;
{$ELSE}
function Polygon; external gdi32 name ''Polygon'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_Polyline: Pointer;

function Polyline;
begin
GetProcedureAddress(_Polyline, gdi32, ''Polyline'');
asm
mov esp, ebp
pop ebp
jmp [_Polyline]
end;
end;
{$ELSE}
function Polyline; external gdi32 name ''Polyline'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PolyBezier: Pointer;

function PolyBezier;
begin
GetProcedureAddress(_PolyBezier, gdi32, ''PolyBezier'');
asm
mov esp, ebp
pop ebp
jmp [_PolyBezier]
end;
end;
{$ELSE}
function PolyBezier; external gdi32 name ''PolyBezier'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PolyBezierTo: Pointer;

function PolyBezierTo;
begin
GetProcedureAddress(_PolyBezierTo, gdi32, ''PolyBezierTo'');
asm
mov esp, ebp
pop ebp
jmp [_PolyBezierTo]
end;
end;
{$ELSE}
function PolyBezierTo; external gdi32 name ''PolyBezierTo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_PolylineTo: Pointer;

function PolylineTo;
begin
GetProcedureAddress(_PolylineTo, gdi32, ''PolylineTo'');
asm
mov esp, ebp
pop ebp
jmp [_PolylineTo]
end;
end;
{$ELSE}
function PolylineTo; external gdi32 name ''PolylineTo'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetViewportExtEx: Pointer;

function SetViewportExtEx;
begin
GetProcedureAddress(_SetViewportExtEx, gdi32, ''SetViewportExtEx'');
asm
mov esp, ebp
pop ebp
jmp [_SetViewportExtEx]
end;
end;
{$ELSE}
function SetViewportExtEx; external gdi32 name ''SetViewportExtEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetViewportOrgEx: Pointer;

function SetViewportOrgEx;
begin
GetProcedureAddress(_SetViewportOrgEx, gdi32, ''SetViewportOrgEx'');
asm
mov esp, ebp
pop ebp
jmp [_SetViewportOrgEx]
end;
end;
{$ELSE}
function SetViewportOrgEx; external gdi32 name ''SetViewportOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetWindowExtEx: Pointer;

function SetWindowExtEx;
begin
GetProcedureAddress(_SetWindowExtEx, gdi32, ''SetWindowExtEx'');
asm
mov esp, ebp

pop ebp
jmp [_SetWindowExtEx]
end;
end;
{$ELSE}
function SetWindowExtEx; external gdi32 name ''SetWindowExtEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetWindowOrgEx: Pointer;

function SetWindowOrgEx;
begin
GetProcedureAddress(_SetWindowOrgEx, gdi32, ''SetWindowOrgEx'');
asm
mov esp, ebp
pop ebp
jmp [_SetWindowOrgEx]
end;
end;
{$ELSE}
function SetWindowOrgEx; external gdi32 name ''SetWindowOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OffsetViewportOrgEx: Pointer;

function OffsetViewportOrgEx;
begin
GetProcedureAddress(_OffsetViewportOrgEx, gdi32, ''OffsetViewportOrgEx'');
asm
mov esp, ebp
pop ebp
jmp [_OffsetViewportOrgEx]
end;
end;
{$ELSE}
function OffsetViewportOrgEx; external gdi32 name ''OffsetViewportOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_OffsetWindowOrgEx: Pointer;

function OffsetWindowOrgEx;
begin
GetProcedureAddress(_OffsetWindowOrgEx, gdi32, ''OffsetWindowOrgEx'');
asm
mov esp, ebp
pop ebp
jmp [_OffsetWindowOrgEx]
end;
end;
{$ELSE}
function OffsetWindowOrgEx; external gdi32 name ''OffsetWindowOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ScaleViewportExtEx: Pointer;

function ScaleViewportExtEx;
begin
GetProcedureAddress(_ScaleViewportExtEx, gdi32, ''ScaleViewportExtEx'');
asm
mov esp, ebp
pop ebp
jmp [_ScaleViewportExtEx]
end;
end;
{$ELSE}
function ScaleViewportExtEx; external gdi32 name ''ScaleViewportExtEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ScaleWindowExtEx: Pointer;

function ScaleWindowExtEx;
begin
GetProcedureAddress(_ScaleWindowExtEx, gdi32, ''ScaleWindowExtEx'');
asm
mov esp, ebp
pop ebp
jmp [_ScaleWindowExtEx]
end;
end;
{$ELSE}
function ScaleWindowExtEx; external gdi32 name ''ScaleWindowExtEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetBitmapDimensionEx: Pointer;

function SetBitmapDimensionEx;
begin
GetProcedureAddress(_SetBitmapDimensionEx, gdi32, ''SetBitmapDimensionEx'');
asm
mov esp, ebp
pop ebp
jmp [_SetBitmapDimensionEx]
end;
end;
{$ELSE}
function SetBitmapDimensionEx; external gdi32 name ''SetBitmapDimensionEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetBrushOrgEx: Pointer;

function SetBrushOrgEx;
begin
GetProcedureAddress(_SetBrushOrgEx, gdi32, ''SetBrushOrgEx'');
asm
mov esp, ebp
pop ebp
jmp [_SetBrushOrgEx]
end;
end;
{$ELSE}
function SetBrushOrgEx; external gdi32 name ''SetBrushOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextFaceA: Pointer;

function GetTextFaceA;
begin
GetProcedureAddress(_GetTextFaceA, gdi32, ''GetTextFaceA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextFaceA]
end;
end;
{$ELSE}
function GetTextFaceA; external gdi32 name ''GetTextFaceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetTextFaceW: Pointer;

function GetTextFaceW;
begin
GetProcedureAddress(_GetTextFaceW, gdi32, ''GetTextFaceW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextFaceW]
end;
end;
{$ELSE}
function GetTextFaceW; external gdi32 name ''GetTextFaceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextFace: Pointer;

function GetTextFace;
begin
GetProcedureAddress(_GetTextFace, gdi32, ''GetTextFaceW'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextFace]
end;
end;
{$ELSE}
function GetTextFace; external gdi32 name ''GetTextFaceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetTextFace: Pointer;

function GetTextFace;
begin
GetProcedureAddress(_GetTextFace, gdi32, ''GetTextFaceA'');
asm
mov esp, ebp
pop ebp
jmp [_GetTextFace]
end;
end;
{$ELSE}
function GetTextFace; external gdi32 name ''GetTextFaceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetKerningPairsA: Pointer;

function GetKerningPairsA;
begin
GetProcedureAddress(_GetKerningPairsA, gdi32, ''GetKerningPairsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetKerningPairsA]
end;
end;
{$ELSE}
function GetKerningPairsA; external gdi32 name ''GetKerningPairsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetKerningPairsW: Pointer;

function GetKerningPairsW;
begin
GetProcedureAddress(_GetKerningPairsW, gdi32, ''GetKerningPairsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetKerningPairsW]
end;
end;
{$ELSE}
function GetKerningPairsW; external gdi32 name ''GetKerningPairsW'';

{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetKerningPairs: Pointer;

function GetKerningPairs;
begin
GetProcedureAddress(_GetKerningPairs, gdi32, ''GetKerningPairsW'');
asm
mov esp, ebp
pop ebp
jmp [_GetKerningPairs]
end;
end;
{$ELSE}
function GetKerningPairs; external gdi32 name ''GetKerningPairsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetKerningPairs: Pointer;

function GetKerningPairs;
begin
GetProcedureAddress(_GetKerningPairs, gdi32, ''GetKerningPairsA'');
asm
mov esp, ebp
pop ebp
jmp [_GetKerningPairs]
end;
end;
{$ELSE}
function GetKerningPairs; external gdi32 name ''GetKerningPairsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetDCOrgEx: Pointer;

function GetDCOrgEx;
begin
GetProcedureAddress(_GetDCOrgEx, gdi32, ''GetDCOrgEx'');
asm
mov esp, ebp

pop ebp
jmp [_GetDCOrgEx]
end;
end;
{$ELSE}
function GetDCOrgEx; external gdi32 name ''GetDCOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_FixBrushOrgEx: Pointer;

function FixBrushOrgEx;
begin
GetProcedureAddress(_FixBrushOrgEx, gdi32, ''FixBrushOrgEx'');
asm
mov esp, ebp
pop ebp
jmp [_FixBrushOrgEx]
end;
end;
{$ELSE}
function FixBrushOrgEx; external gdi32 name ''FixBrushOrgEx'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UnrealizeObject: Pointer;

function UnrealizeObject;
begin
GetProcedureAddress(_UnrealizeObject, gdi32, ''UnrealizeObject'');
asm
mov esp, ebp
pop ebp
jmp [_UnrealizeObject]
end;
end;
{$ELSE}
function UnrealizeObject; external gdi32 name ''UnrealizeObject'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GdiFlush: Pointer;

function GdiFlush;
begin
GetProcedureAddress(_GdiFlush, gdi32, ''GdiFlush'');


asm
mov esp, ebp
pop ebp
jmp [_GdiFlush]
end;
end;
{$ELSE}
function GdiFlush; external gdi32 name ''GdiFlush'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GdiSetBatchLimit: Pointer;

function GdiSetBatchLimit;
begin
GetProcedureAddress(_GdiSetBatchLimit, gdi32, ''GdiSetBatchLimit'');
asm
mov esp, ebp
pop ebp
jmp [_GdiSetBatchLimit]
end;
end;
{$ELSE}
function GdiSetBatchLimit; external gdi32 name ''GdiSetBatchLimit'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GdiGetBatchLimit: Pointer;

function GdiGetBatchLimit;
begin
GetProcedureAddress(_GdiGetBatchLimit, gdi32, ''GdiGetBatchLimit'');
asm
mov esp, ebp
pop ebp
jmp [_GdiGetBatchLimit]
end;
end;
{$ELSE}
function GdiGetBatchLimit; external gdi32 name ''GdiGetBatchLimit'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetICMMode: Pointer;



function SetICMMode;
begin
GetProcedureAddress(_SetICMMode, gdi32, ''SetICMMode'');
asm
mov esp, ebp
pop ebp
jmp [_SetICMMode]
end;
end;
{$ELSE}
function SetICMMode; external gdi32 name ''SetICMMode'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CheckColorsInGamut: Pointer;

function CheckColorsInGamut;
begin
GetProcedureAddress(_CheckColorsInGamut, gdi32, ''CheckColorsInGamut'');
asm
mov esp, ebp
pop ebp
jmp [_CheckColorsInGamut]
end;
end;
{$ELSE}
function CheckColorsInGamut; external gdi32 name ''CheckColorsInGamut'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetColorSpace: Pointer;

function GetColorSpace;
begin
GetProcedureAddress(_GetColorSpace, gdi32, ''GetColorSpace'');
asm
mov esp, ebp
pop ebp
jmp [_GetColorSpace]
end;
end;
{$ELSE}
function GetColorSpace; external gdi32 name ''GetColorSpace'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLogColorSpaceA: Pointer;

function GetLogColorSpaceA;
begin
GetProcedureAddress(_GetLogColorSpaceA, gdi32, ''GetLogColorSpaceA'');
asm
mov esp, ebp
pop ebp
jmp [_GetLogColorSpaceA]
end;
end;
{$ELSE}
function GetLogColorSpaceA; external gdi32 name ''GetLogColorSpaceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetLogColorSpaceW: Pointer;

function GetLogColorSpaceW;
begin
GetProcedureAddress(_GetLogColorSpaceW, gdi32, ''GetLogColorSpaceW'');
asm
mov esp, ebp
pop ebp
jmp [_GetLogColorSpaceW]
end;
end;
{$ELSE}
function GetLogColorSpaceW; external gdi32 name ''GetLogColorSpaceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetLogColorSpace: Pointer;

function GetLogColorSpace;
begin
GetProcedureAddress(_GetLogColorSpace, gdi32, ''GetLogColorSpaceW'');

asm
mov esp, ebp
pop ebp
jmp [_GetLogColorSpace]
end;
end;
{$ELSE}
function GetLogColorSpace; external gdi32 name ''GetLogColorSpaceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetLogColorSpace: Pointer;

function GetLogColorSpace;
begin
GetProcedureAddress(_GetLogColorSpace, gdi32, ''GetLogColorSpaceA'');
asm
mov esp, ebp
pop ebp
jmp [_GetLogColorSpace]
end;
end;
{$ELSE}
function GetLogColorSpace; external gdi32 name ''GetLogColorSpaceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_CreateColorSpaceA: Pointer;

function CreateColorSpaceA;
begin
GetProcedureAddress(_CreateColorSpaceA, gdi32, ''CreateColorSpaceA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateColorSpaceA]
end;
end;
{$ELSE}
function CreateColorSpaceA; external gdi32 name ''CreateColorSpaceA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_CreateColorSpaceW: Pointer;

function CreateColorSpaceW;
begin
GetProcedureAddress(_CreateColorSpaceW, gdi32, ''CreateColorSpaceW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateColorSpaceW]
end;
end;
{$ELSE}
function CreateColorSpaceW; external gdi32 name ''CreateColorSpaceW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_CreateColorSpace: Pointer;

function CreateColorSpace;
begin
GetProcedureAddress(_CreateColorSpace, gdi32, ''CreateColorSpaceW'');
asm
mov esp, ebp
pop ebp
jmp [_CreateColorSpace]
end;
end;
{$ELSE}
function CreateColorSpace; external gdi32 name ''CreateColorSpaceW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_CreateColorSpace: Pointer;

function CreateColorSpace;
begin
GetProcedureAddress(_CreateColorSpace, gdi32, ''CreateColorSpaceA'');
asm
mov esp, ebp
pop ebp
jmp [_CreateColorSpace]
end;
end;
{$ELSE}
function CreateColorSpace; external gdi32 name ''CreateColorSpaceA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetColorSpace: Pointer;

function SetColorSpace;
begin
GetProcedureAddress(_SetColorSpace, gdi32, ''SetColorSpace'');
asm
mov esp, ebp
pop ebp
jmp [_SetColorSpace]
end;
end;
{$ELSE}
function SetColorSpace; external gdi32 name ''SetColorSpace'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_DeleteColorSpace: Pointer;

function DeleteColorSpace;
begin
GetProcedureAddress(_DeleteColorSpace, gdi32, ''DeleteColorSpace'');
asm
mov esp, ebp
pop ebp
jmp [_DeleteColorSpace]
end;
end;
{$ELSE}
function DeleteColorSpace; external gdi32 name ''DeleteColorSpace'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetICMProfileA: Pointer;



function GetICMProfileA;
begin
GetProcedureAddress(_GetICMProfileA, gdi32, ''GetICMProfileA'');
asm
mov esp, ebp
pop ebp
jmp [_GetICMProfileA]
end;
end;
{$ELSE}
function GetICMProfileA; external gdi32 name ''GetICMProfileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_GetICMProfileW: Pointer;

function GetICMProfileW;
begin
GetProcedureAddress(_GetICMProfileW, gdi32, ''GetICMProfileW'');
asm
mov esp, ebp
pop ebp
jmp [_GetICMProfileW]
end;
end;
{$ELSE}
function GetICMProfileW; external gdi32 name ''GetICMProfileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_GetICMProfile: Pointer;

function GetICMProfile;
begin
GetProcedureAddress(_GetICMProfile, gdi32, ''GetICMProfileW'');
asm
mov esp, ebp
pop ebp
jmp [_GetICMProfile]
end;
end;
{$ELSE}
function GetICMProfile; external gdi32 name ''GetICMProfileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_GetICMProfile: Pointer;

function GetICMProfile;
begin
GetProcedureAddress(_GetICMProfile, gdi32, ''GetICMProfileA'');
asm
mov esp, ebp
pop ebp
jmp [_GetICMProfile]
end;
end;
{$ELSE}
function GetICMProfile; external gdi32 name ''GetICMProfileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SetICMProfileA: Pointer;

function SetICMProfileA;
begin
GetProcedureAddress(_SetICMProfileA, gdi32, ''SetICMProfileA'');
asm
mov esp, ebp
pop ebp
jmp [_SetICMProfileA]
end;
end;
{$ELSE}
function SetICMProfileA; external gdi32 name ''SetICMProfileA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetICMProfileW: Pointer;

function SetICMProfileW;
begin
GetProcedureAddress(_SetICMProfileW, gdi32, ''SetICMProfileW'');
asm
mov esp, ebp
pop ebp

jmp [_SetICMProfileW]
end;
end;
{$ELSE}
function SetICMProfileW; external gdi32 name ''SetICMProfileW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_SetICMProfile: Pointer;

function SetICMProfile;
begin
GetProcedureAddress(_SetICMProfile, gdi32, ''SetICMProfileW'');
asm
mov esp, ebp
pop ebp
jmp [_SetICMProfile]
end;
end;
{$ELSE}
function SetICMProfile; external gdi32 name ''SetICMProfileW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_SetICMProfile: Pointer;

function SetICMProfile;
begin
GetProcedureAddress(_SetICMProfile, gdi32, ''SetICMProfileA'');
asm
mov esp, ebp
pop ebp
jmp [_SetICMProfile]
end;
end;
{$ELSE}
function SetICMProfile; external gdi32 name ''SetICMProfileA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_GetDeviceGammaRamp: Pointer;

function GetDeviceGammaRamp;
begin
GetProcedureAddress(_GetDeviceGammaRamp, gdi32, ''GetDeviceGammaRamp'');
asm
mov esp, ebp
pop ebp
jmp [_GetDeviceGammaRamp]
end;
end;
{$ELSE}
function GetDeviceGammaRamp; external gdi32 name ''GetDeviceGammaRamp'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_SetDeviceGammaRamp: Pointer;

function SetDeviceGammaRamp;
begin
GetProcedureAddress(_SetDeviceGammaRamp, gdi32, ''SetDeviceGammaRamp'');
asm
mov esp, ebp
pop ebp
jmp [_SetDeviceGammaRamp]
end;
end;
{$ELSE}
function SetDeviceGammaRamp; external gdi32 name ''SetDeviceGammaRamp'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_ColorMatchToTarget: Pointer;

function ColorMatchToTarget;
begin
GetProcedureAddress(_ColorMatchToTarget, gdi32, ''ColorMatchToTarget'');
asm
mov esp, ebp
pop ebp
jmp [_ColorMatchToTarget]
end;


end;
{$ELSE}
function ColorMatchToTarget; external gdi32 name ''ColorMatchToTarget'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumICMProfilesA: Pointer;

function EnumICMProfilesA;
begin
GetProcedureAddress(_EnumICMProfilesA, gdi32, ''EnumICMProfilesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumICMProfilesA]
end;
end;
{$ELSE}
function EnumICMProfilesA; external gdi32 name ''EnumICMProfilesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_EnumICMProfilesW: Pointer;

function EnumICMProfilesW;
begin
GetProcedureAddress(_EnumICMProfilesW, gdi32, ''EnumICMProfilesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumICMProfilesW]
end;
end;
{$ELSE}
function EnumICMProfilesW; external gdi32 name ''EnumICMProfilesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_EnumICMProfiles: Pointer;

function EnumICMProfiles;
begin
GetProcedureAddress(_EnumICMProfiles, gdi32, ''EnumICMProfilesW'');
asm
mov esp, ebp
pop ebp
jmp [_EnumICMProfiles]
end;
end;
{$ELSE}
function EnumICMProfiles; external gdi32 name ''EnumICMProfilesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_EnumICMProfiles: Pointer;

function EnumICMProfiles;
begin
GetProcedureAddress(_EnumICMProfiles, gdi32, ''EnumICMProfilesA'');
asm
mov esp, ebp
pop ebp
jmp [_EnumICMProfiles]
end;
end;
{$ELSE}
function EnumICMProfiles; external gdi32 name ''EnumICMProfilesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_UpdateICMRegKeyA: Pointer;

function UpdateICMRegKeyA;
begin
GetProcedureAddress(_UpdateICMRegKeyA, gdi32, ''UpdateICMRegKeyA'');
asm
mov esp, ebp
pop ebp
jmp [_UpdateICMRegKeyA]
end;
end;
{$ELSE}
function UpdateICMRegKeyA; external gdi32 name ''UpdateICMRegKeyA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_UpdateICMRegKeyW: Pointer;

function UpdateICMRegKeyW;
begin
GetProcedureAddress(_UpdateICMRegKeyW, gdi32, ''UpdateICMRegKeyW'');
asm
mov esp, ebp
pop ebp
jmp [_UpdateICMRegKeyW]
end;
end;
{$ELSE}
function UpdateICMRegKeyW; external gdi32 name ''UpdateICMRegKeyW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_UpdateICMRegKey: Pointer;

function UpdateICMRegKey;
begin
GetProcedureAddress(_UpdateICMRegKey, gdi32, ''UpdateICMRegKeyW'');
asm
mov esp, ebp
pop ebp
jmp [_UpdateICMRegKey]
end;
end;
{$ELSE}
function UpdateICMRegKey; external gdi32 name ''UpdateICMRegKeyW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_UpdateICMRegKey: Pointer;

function UpdateICMRegKey;
begin
GetProcedureAddress(_UpdateICMRegKey, gdi32, ''UpdateICMRegKeyA'');
asm
mov esp, ebp
pop ebp
jmp [_UpdateICMRegKey]
end;
end;
{$ELSE}
function UpdateICMRegKey; external gdi32 name ''UpdateICMRegKeyA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_ColorCorrectPalette: Pointer;

function ColorCorrectPalette;
begin
GetProcedureAddress(_ColorCorrectPalette, gdi32, ''ColorCorrectPalette'');
asm
mov esp, ebp
pop ebp
jmp [_ColorCorrectPalette]
end;
end;
{$ELSE}
function ColorCorrectPalette; external gdi32 name ''ColorCorrectPalette'';
{$ENDIF DYNAMIC_LINK}


{$IFDEF DYNAMIC_LINK}
var
_wglCopyContext: Pointer;

function wglCopyContext;
begin
GetProcedureAddress(_wglCopyContext, opengl32, ''wglCopyContext'');
asm
mov esp, ebp
pop ebp
jmp [_wglCopyContext]
end;
end;
{$ELSE}
function wglCopyContext; external opengl32 name ''wglCopyContext'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglCreateContext: Pointer;

function wglCreateContext;
begin
GetProcedureAddress(_wglCreateContext, opengl32, ''wglCreateContext'');
asm
mov esp, ebp
pop ebp
jmp [_wglCreateContext]
end;
end;
{$ELSE}
function wglCreateContext; external opengl32 name ''wglCreateContext'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglCreateLayerContext: Pointer;

function wglCreateLayerContext;
begin
GetProcedureAddress(_wglCreateLayerContext, opengl32, ''wglCreateLayerContext'');
asm
mov esp, ebp
pop ebp
jmp [_wglCreateLayerContext]
end;
end;
{$ELSE}
function wglCreateLayerContext; external opengl32 name ''wglCreateLayerContext'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglDeleteContext: Pointer;

function wglDeleteContext;
begin
GetProcedureAddress(_wglDeleteContext, opengl32, ''wglDeleteContext'');
asm
mov esp, ebp
pop ebp
jmp [_wglDeleteContext]
end;
end;
{$ELSE}
function wglDeleteContext; external opengl32 name ''wglDeleteContext'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglGetCurrentContext: Pointer;

function wglGetCurrentContext;
begin
GetProcedureAddress(_wglGetCurrentContext, opengl32, ''wglGetCurrentContext'');
asm
mov esp, ebp
pop ebp
jmp [_wglGetCurrentContext]
end;
end;
{$ELSE}
function wglGetCurrentContext; external opengl32 name ''wglGetCurrentContext'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglGetCurrentDC: Pointer;

function wglGetCurrentDC;
begin
GetProcedureAddress(_wglGetCurrentDC, opengl32, ''wglGetCurrentDC'');
asm
mov esp, ebp
pop ebp
jmp [_wglGetCurrentDC]
end;
end;
{$ELSE}
function wglGetCurrentDC; external opengl32 name ''wglGetCurrentDC'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglGetProcAddress: Pointer;

function wglGetProcAddress;
begin
GetProcedureAddress(_wglGetProcAddress, opengl32, ''wglGetProcAddress'');
asm
mov esp, ebp
pop ebp
jmp [_wglGetProcAddress]
end;
end;
{$ELSE}
function wglGetProcAddress; external opengl32 name ''wglGetProcAddress'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglMakeCurrent: Pointer;

function wglMakeCurrent;
begin
GetProcedureAddress(_wglMakeCurrent, opengl32, ''wglMakeCurrent'');
asm
mov esp, ebp
pop ebp
jmp [_wglMakeCurrent]
end;
end;
{$ELSE}
function wglMakeCurrent; external opengl32 name ''wglMakeCurrent'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglShareLists: Pointer;

function wglShareLists;
begin
GetProcedureAddress(_wglShareLists, opengl32, ''wglShareLists'');
asm
mov esp, ebp
pop ebp
jmp [_wglShareLists]


end;
end;
{$ELSE}
function wglShareLists; external opengl32 name ''wglShareLists'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglUseFontBitmapsA: Pointer;

function wglUseFontBitmapsA;
begin
GetProcedureAddress(_wglUseFontBitmapsA, opengl32, ''wglUseFontBitmapsA'');
asm
mov esp, ebp
pop ebp
jmp [_wglUseFontBitmapsA]
end;
end;
{$ELSE}
function wglUseFontBitmapsA; external opengl32 name ''wglUseFontBitmapsA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglUseFontBitmapsW: Pointer;

function wglUseFontBitmapsW;
begin
GetProcedureAddress(_wglUseFontBitmapsW, opengl32, ''wglUseFontBitmapsW'');
asm
mov esp, ebp
pop ebp
jmp [_wglUseFontBitmapsW]
end;
end;
{$ELSE}
function wglUseFontBitmapsW; external opengl32 name ''wglUseFontBitmapsW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_wglUseFontBitmaps: Pointer;

function wglUseFontBitmaps;
begin
GetProcedureAddress(_wglUseFontBitmaps, opengl32, ''wglUseFontBitmapsW'');
asm
mov esp, ebp
pop ebp
jmp [_wglUseFontBitmaps]
end;
end;
{$ELSE}
function wglUseFontBitmaps; external opengl32 name ''wglUseFontBitmapsW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_wglUseFontBitmaps: Pointer;

function wglUseFontBitmaps;
begin
GetProcedureAddress(_wglUseFontBitmaps, opengl32, ''wglUseFontBitmapsA'');
asm
mov esp, ebp
pop ebp
jmp [_wglUseFontBitmaps]
end;
end;
{$ELSE}
function wglUseFontBitmaps; external opengl32 name ''wglUseFontBitmapsA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_SwapBuffers: Pointer;

function SwapBuffers;
begin
GetProcedureAddress(_SwapBuffers, opengl32, ''SwapBuffers'');
asm
mov esp, ebp
pop ebp
jmp [_SwapBuffers]
end;
end;
{$ELSE}
function SwapBuffers; external opengl32 name ''SwapBuffers'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglUseFontOutlinesA: Pointer;

function wglUseFontOutlinesA;
begin
GetProcedureAddress(_wglUseFontOutlinesA, opengl32, ''wglUseFontOutlinesA'');
asm
mov esp, ebp
pop ebp
jmp [_wglUseFontOutlinesA]
end;
end;
{$ELSE}
function wglUseFontOutlinesA; external opengl32 name ''wglUseFontOutlinesA'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglUseFontOutlinesW: Pointer;

function wglUseFontOutlinesW;
begin
GetProcedureAddress(_wglUseFontOutlinesW, opengl32, ''wglUseFontOutlinesW'');
asm
mov esp, ebp
pop ebp
jmp [_wglUseFontOutlinesW]
end;
end;
{$ELSE}
function wglUseFontOutlinesW; external opengl32 name ''wglUseFontOutlinesW'';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}

{$IFDEF DYNAMIC_LINK}
var
_wglUseFontOutlines: Pointer;


function wglUseFontOutlines;
begin
GetProcedureAddress(_wglUseFontOutlines, opengl32, ''wglUseFontOutlinesW'');
asm
mov esp, ebp
pop ebp
jmp [_wglUseFontOutlines]
end;
end;
{$ELSE}
function wglUseFontOutlines; external opengl32 name ''wglUseFontOutlinesW'';
{$ENDIF DYNAMIC_LINK}
{$ELSE}

{$IFDEF DYNAMIC_LINK}
var
_wglUseFontOutlines: Pointer;

function wglUseFontOutlines;
begin
GetProcedureAddress(_wglUseFontOutlines, opengl32, ''wglUseFontOutlinesA'');
asm
mov esp, ebp
pop ebp
jmp [_wglUseFontOutlines]
end;
end;
{$ELSE}
function wglUseFontOutlines; external opengl32 name ''wglUseFontOutlinesA'';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}

{$IFDEF DYNAMIC_LINK}
var
_wglDescribeLayerPlane: Pointer;

function wglDescribeLayerPlane;
begin
GetProcedureAddress(_wglDescribeLayerPlane, opengl32, ''wglDescribeLayerPlane'');
asm
mov esp, ebp


pop ebp
jmp [_wglDescribeLayerPlane]
end;
end;
{$ELSE}
function wglDescribeLayerPlane; external opengl32 name ''wglDescribeLayerPlane'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglSetLayerPaletteEntries: Pointer;

function wglSetLayerPaletteEntries;
begin
GetProcedureAddress(_wglSetLayerPaletteEntries, opengl32, ''wglSetLayerPaletteEntries'');
asm
mov esp, ebp
pop ebp
jmp [_wglSetLayerPaletteEntries]
end;
end;
{$ELSE}
function wglSetLayerPaletteEntries; external opengl32 name ''wglSetLayerPaletteEntries'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglGetLayerPaletteEntries: Pointer;

function wglGetLayerPaletteEntries;
begin
GetProcedureAddress(_wglGetLayerPaletteEntries, opengl32, ''wglGetLayerPaletteEntries'');
asm
mov esp, ebp
pop ebp
jmp [_wglGetLayerPaletteEntries]
end;
end;
{$ELSE}
function wglGetLayerPaletteEntries; external opengl32 name ''wglGetLayerPaletteEntries'';

{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglRealizeLayerPalette: Pointer;

function wglRealizeLayerPalette;
begin
GetProcedureAddress(_wglRealizeLayerPalette, opengl32, ''wglRealizeLayerPalette'');
asm
mov esp, ebp
pop ebp
jmp [_wglRealizeLayerPalette]
end;
end;
{$ELSE}
function wglRealizeLayerPalette; external opengl32 name ''wglRealizeLayerPalette'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglSwapLayerBuffers: Pointer;

function wglSwapLayerBuffers;
begin
GetProcedureAddress(_wglSwapLayerBuffers, opengl32, ''wglSwapLayerBuffers'');
asm
mov esp, ebp
pop ebp
jmp [_wglSwapLayerBuffers]
end;
end;
{$ELSE}
function wglSwapLayerBuffers; external opengl32 name ''wglSwapLayerBuffers'';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
_wglSwapMultipleBuffers: Pointer;

function wglSwapMultipleBuffers;
begin
GetProcedureAddress(_wglSwapMultipleBuffers, opengl32, ''wglSwapMultipleBuffers'');

asm
mov esp, ebp
pop ebp
jmp [_wglSwapMultipleBuffers]
end;
end;
{$ELSE}
function wglSwapMultipleBuffers; external opengl32 name ''wglSwapMultipleBuffers'';
{$ENDIF DYNAMIC_LINK}

end.

60楼: 如果不是只盯着Delphi的话,其实网上类似的代码很多。
随便用搜索引擎搜索一下就可以找到

中文的,关于搜索引擎的,包括网络蜘蛛。
SQLET - 开放源码的中文搜索引擎
http://www.sqlet.com/blog/archives/index.php?setdate=200507&mode=

java的(JAVA的资源就是多啊,暴多)
Nutch
http://lucene.apache.org/nutch/index.html

61楼: TNND,这么个刷屏法,早点去死吧`````````````