TDCOMConnection使用用户登陆怎么处理???

MEFULEU 2005-06-03 10:20:43
我设置
DCOMConnection->LoginPrompt=false;

但是我又想让他使用我服务器指定的用户登陆,请问如何写代码?

以下事件中好像不能够更改用户,只是得到当前的用户密码而已???????
void __fastcall TDM::DCOMConnectionLogin(TObject *Sender,
AnsiString Username, AnsiString Password)
{
//Username="aaa";
//Password="aaa";
}
...全文
269 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
MEFULEU 2005-06-15
  • 打赏
  • 举报
回复
哦,又有了!!

搞不懂,给分的时候明明说出错了。
MEFULEU 2005-06-14
  • 打赏
  • 举报
回复
太搞笑了怎么会强制结贴了呢?

分都没有给各位大哥;不好意思了!!!
MEFULEU 2005-06-09
  • 打赏
  • 举报
回复
没有其他人关注了吗?真是失败的bcb!
MEFULEU 2005-06-06
  • 打赏
  • 举报
回复
unsigned(僵哥)

你的想法太伟大了。可惜鄙人无法完成这项神圣的任务;
MEFULEU 2005-06-03
  • 打赏
  • 举报
回复
如果我设置
DCOMConnection->LoginPrompt=true;

;这里会显示机器间的用户和密码登陆框;

这里我不想人为的重新设置这个用户和密码!

所以设置DCOMConnection->LoginPrompt=false;

但是指定的用户和密码怎么用代码完成呢?

MEFULEU 2005-06-03
  • 打赏
  • 举报
回复
另外,我不想打开guest用户;

这个用户打开了,机器很容易感染病毒的;
MEFULEU 2005-06-03
  • 打赏
  • 举报
回复
老兄,这个可不是数据库连接的密码;

这个是机器间连接的用户和密码;

假设我的机器只开administrator;其他用户都不开;那么你别的机器连接

我的机器就只能够使用这个用户连接吧;

这里就是这个意思!
constantine 2005-06-03
  • 打赏
  • 举报
回复
DCOMConnection 只是做连接,数据库的用户跟密码是在服务器端的对应控件设置的吧
如aodtable,ADOConnection1,
看你的server用什么控件去连接数据库咯
僵哥 2005-06-03
  • 打赏
  • 举报
回复
我的意思是,是否不使用DCOMConnection而自己写一个类似的连接,然后重写CreateRemoteComObject的部分,然后连上身份验证信息。
MEFULEU 2005-06-03
  • 打赏
  • 举报
回复
我还是不懂;

是不是说我的想法不可行呢?

开guest用户,真的让人.......汗


僵哥 2005-06-03
  • 打赏
  • 举报
回复
上面这代码当中验证主要关心的是
ServerInfo: TCoServerInfo
而实际上不管如何操作,这个
ServerInfo.pAuthInfo
始终为nil
僵哥 2005-06-03
  • 打赏
  • 举报
回复
是db.hpp里面可重设置的一个LoginPrompt使用到的全局过程
刚才翻译了一下资料,发现好象DCOMConnection本身似乎并不支持Auth,里面所谓的Login也不象是NT的Login,至少没测得结果。只是不知道能否通过IPC连接之类的通过进程级的验证(似乎可行性不太大)而其中主要的远程COM对象初始化CoCreateInstanceEx(CreateRemoteComObject过程当中)已经封装死了,并且除了封进一个MachineName之后就没有任何相关COAUTHINFO之类的东西。

Delphi源码
-------------------------------------------------------------
function CreateRemoteComObject(const MachineName: WideString;
const ClassID: TGUID): IUnknown;
const
LocalFlags = CLSCTX_LOCAL_SERVER or CLSCTX_REMOTE_SERVER or CLSCTX_INPROC_SERVER;
RemoteFlags = CLSCTX_REMOTE_SERVER;
var
MQI: TMultiQI;
ServerInfo: TCoServerInfo;
IID_IUnknown: TGuid;
Flags, Size: DWORD;
LocalMachine: array [0..MAX_COMPUTERNAME_LENGTH] of char;
begin
if @CoCreateInstanceEx = nil then
raise Exception.CreateRes(@SDCOMNotInstalled);
FillChar(ServerInfo, sizeof(ServerInfo), 0);
ServerInfo.pwszName := PWideChar(MachineName);
IID_IUnknown := IUnknown;
MQI.IID := @IID_IUnknown;
MQI.itf := nil;
MQI.hr := 0;
{ If a MachineName is specified check to see if it the local machine.
If it isn't, do not allow LocalServers to be used. }
if Length(MachineName) > 0 then
begin
Size := Sizeof(LocalMachine); // Win95 is hypersensitive to size
if GetComputerName(LocalMachine, Size) and
(AnsiCompareText(LocalMachine, MachineName) = 0) then
Flags := LocalFlags else
Flags := RemoteFlags;
end else
Flags := LocalFlags;
OleCheck(CoCreateInstanceEx(ClassID, nil, Flags, @ServerInfo, 1, @MQI));
OleCheck(MQI.HR);
Result := MQI.itf;
end;
MEFULEU 2005-06-03
  • 打赏
  • 举报
回复
僵哥:

RemoteLoginDialogProc这个东东那个对象中有呀?



僵哥 2005-06-03
  • 打赏
  • 举报
回复
设置RemoteLoginDialogProc,同时设置LoginPrompt为true试试看
MEFULEU 2005-06-03
  • 打赏
  • 举报
回复
这个事件中可以自动填充用户;

void __fastcall TDM::DCOMConnectionGetUsername(TObject *Sender,
AnsiString &Username)
{

}

但是我也不敢肯定是否这个用户就是连接客户机的用户???

可能是连接数据库的用户密码也说不准!!!

不过机器间连接的用户和密码;不是在这块设置不知到那设置;或者根本不用设置??

但是想象一下,有点不可能阿!


constantine 2005-06-03
  • 打赏
  • 举报
回复
这个user跟密码是这个,就不知道了,如果在本机都不需要,其他得我记得网上说要开guest用户才能连
dcom的东西我也是最近才看的

你研究一下pascal的代码,看看如果DCOMConnection->LoginPrompt=true;时
输入的密码跟用户怎么弄的,看看有没有帮助,
能不能找到输入框的句柄,自动填,自动处理

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧