szp123 发表于 2012-4-5 00:10:38

请教个加域的问题,微软NetJoinDomain这个函数强行加域方法。

本帖最后由 szp123 于 2012-4-5 16:09 编辑

如题,新手我在dllcall调用NetJoinDomain这个函数实现加域的时候,如果域服务器没有建立客户端计算机名,怎么加都不行,但如果域服务器里有客户端的计算机就能成功加入,请各位知道一下怎么能实现强行加入,跟fJoinOptions这个参数设置有关系吗?苦恼{:face (396):}

引入P版大大的写的函数Func _NetJoinDomain($sDomain, $sServer = "", $sAccountOU = "", $sAccount = "", $sPswd = "")
      Local $iResult

      $iResult = DllCall("netapi32.dll", "int", "NetJoinDomain", _
                        "wstr", $sServer, _
                        "wstr", $sDomain, _
                        "wstr", $sAccountOU, _
                        "wstr", $sAccount, _
                        "wstr", $sPswd, _
                        "int", 1)
      Return SetError($iResult, 0, $iResult = 0)
        EndFunc ;==>_NetJoinDomain()引用一个微软的连接http://msdn.microsoft.com/en-us/library/windows/desktop/aa370433

算是两个问题了,还有就是怎么返回类似ERROR_ACCESS_DENIED的 Return code 方便查看原因
非常感谢

szp123 发表于 2012-4-5 16:09:31

怎么没人回复啊。晕

502762378 发表于 2012-4-5 16:23:20

P版的这个我早实验过了,初看还可以直接拖入OU,奈何测试一直失败。

user3000 发表于 2012-4-5 16:25:53

强行加入?
弱弱问句:
AU3的代码都能越过系统或网络权限了吗?
岂不是在黑客之路也将大有可为?

我帮顶, 求真知!

szp123 发表于 2012-4-5 16:34:08

本帖最后由 szp123 于 2012-4-5 16:42 编辑

P版的这个我早实验过了,初看还可以直接拖入OU,奈何测试一直失败。
502762378 发表于 2012-4-5 16:23 http://www.autoitx.com/images/common/back.gif


    老兄,我的也是,为什么用VB脚本就能成功添加,无论域服务器是否有本机计算机名
~ 难道一定要VB那种类型的函数吗,好像很麻烦的样子。

szp123 发表于 2012-4-5 16:40:49

强行加入?
弱弱问句:
AU3的代码都能越过系统或网络权限了吗?
岂不是在黑客之路也将大有可为?

我帮顶, ...
user3000 发表于 2012-4-5 16:25 http://www.autoitx.com/images/common/back.gif


    在MSDN里面说道NetJoinDomain有一个参数NETSETUP_JOIN_READONLY
0x00000800,这个参数明确说明道Join the target machine specified in lpServer parameter using a pre-created account without requiring a writable domain controller
翻译过来是:加入在可写域控制器无需lpServer使用预创建的帐户的参数指定目标机。
而且此参数最后段说道Starting with Windows 7, an alternate mechanism is to use the offline domain join mechanism.翻译为与Windows 7开始,另一种机制是使用脱机加入域机制。

这也就是说可以脱机加域,强行加入,无需服务器有此计算机或域账户信息。

user3000 发表于 2012-4-5 17:05:08

Join the target machine specified in lpServer parameter using a pre-created account without requiring a writable domain controller
对于这句话, 你给出的翻译误差很大吧?
是用预建立帐户时才无需一个可写的域控制器(即域管理器?) 而不是无需使用预创建的帐户!
预创建帐户是必需的!有了预创建帐户, 才无需可写的域控制器!(我认为, 可能同时还存在一个不可写的域控制器, 不然这预创建帐户从哪可以得到验证?)

Starting with Windows 7, an alternate mechanism is to use the offline domain join mechanism.
这是为 WIN7设立的加入域的可选机制. 虽说是'加入时'可以在不联机状态, 但联机后我想必然还会再验证其合法性吧?
第2条是本人按WINDOWS一向的安全机制所作的设想.
我还是百分百肯定, 没有强制加入域这种机制或机会存在.

502762378 发表于 2012-4-5 18:58:25

楼上搞错楼主所谓的“强制”二字了,楼主所谓强制是域控制器没有要加入域的计算机信息,直接加域,看来是我的问题了,楼主把fJoinOptions设为0x00000800还不可以嘛?也不知道这个0x00000800是不是要转换一下了,上班测试一下

szp123 发表于 2012-4-5 19:25:07

回复 8# 502762378
老兄,0x00000800可以直接叠加到0x00000001使用,不过我没试过WIN7,我需要XP加入,刚下班,呵呵

502762378 发表于 2012-4-5 19:32:58

回复 9# szp123


    我说我上班测试。。
实在没办法可以考虑先创建个计算机名对象,得好好屡屡

user3000 发表于 2012-4-5 19:33:14

是我不懂装懂, 糊乱打岔了!
请上面有条件测试的两位把可行的测试反馈到这里吧!

szp123 发表于 2012-4-6 22:42:07

回复 11# user3000

老兄的学习精神可贵
看来还是要用VB类脚本才行,参数我都试过,XP下还是无法加到没有计算机名的域控制器,哎。不过WIN7我没法试,我用虚拟机硬盘空间没那么大。

502762378 发表于 2012-4-7 10:27:04

理论上不行,可总想尝试一下,未加域电脑用_AD_CreateComputer创建计算机帐户测试失败
参数精确到加入域的OU测试失败,还有一种想法我已经不抱希望了,远程执行创建计算机帐户的脚本而后加域。

pandy05 发表于 2012-4-9 18:11:09

唉,好像不支持win7
$joinDomainResultNumber      = $computerObj.JoinDomainOrWorkGroup($adDomain, $adPassword, $adDomain & "\" & $adUsername,'', 35)
$joinDomainResultNumber      = ^ ERROR
页: [1]
查看完整版本: 请教个加域的问题,微软NetJoinDomain这个函数强行加域方法。