关于2000下多用户程序的问题

时间:2022-06-02 00:24:02
在win2000下,
如何才能得到所有的用户名?
如何能够根据不同的用户设置不同的操作?
低权限的用户如何才能写入或读取程序的配置?
因为2000有磁盘读取权限,所以如果一个程序要怎样才能保证所有的用户都能正常使用?
像office、acdsee这些软件,在安装后都会询问:是自己使用,还是所有使用?
这可以达到控制让其他用户使用的目的,这是如何实现的?
要将信息加入到注册表的什么部分?


现在我思路有点混乱,希望各位还能看懂。:(

5 个解决方案

#1


我的意思是:

1)怎样得到当前用户的操作权限,以判断用户是否有权限安装程序?

2)要使程序只能被当前安装的用户使用该如何做?如果要让它同时可以让其他用户使用又该如何做呢?

3)配置信息该怎样保存,才可以被其他低权限的用户读取或修改?

这样就比较清楚了吧。

敬候答复。

#2


The GetUserName function retrieves the user name of the current thread. This is the name of the user currently logged onto the system. 

BOOL GetUserName(

    LPTSTR lpBuffer, // address of name buffer 
    LPDWORD nSize  // address of size of name buffer 
   );
 

Parameters

lpBuffer

Points to the buffer to receive the null-terminated string containing the user's logon name. If this buffer is not large enough to contain the entire user name, the function fails. 

nSize

Pointer to a DWORD that, on input, specifies the maximum size, in characters, of the buffer specified by the lpBuffer parameter. If this buffer is not large enough to contain the entire user name, the function fails. If the function succeeds, it will place the number of characters copied to the buffer into the DWORD that nSize points to. 

 

Return Values

If the function succeeds, the return value is nonzero, and the variable pointed to by nSize contains the number of characters copied to the buffer specified by lpBuffer, including the terminating null character. 
If the function fails, the return value is zero. To get extended error information, call GetLastError. 

Remarks

If the current thread is impersonating another client, the GetUserName function returns the user name of the client that the thread is impersonating. 

See Also

LookupAccountName

#3


To: songhtao(三十年孤独)
    感谢您的答复,但是我想知道的并不是如何得到当前用户名。
    我的意思是:
    当用户安装我的软件时,我如何知道该用户的账号具有可以安装的权限?
    当用户安装我的软件是为了只自己使用时,软件在注册表、配置文件的放置等方面和允许其他用户共同使用时有什么区别?
    因为2000下不是每个用户都是独立的吗?我怎么才能实现这样的管理呢?


企盼您的答复。

#4


安装的权限?2000下有怎么样的权限划分么?
你自己控制吧?取得用户名以后判断,是本机注册用户就用所有权限。

#5


若安装权不够2000会自己提示的,当然你自己可以拦截,如你在安装中要操作注册表,就要考虑失败的情况。
获得用户信息可用活动目录服务接口(ADSI)如
常用接口:
 IADsComputer
 IADSDomain
 IADsGroup
 IADsUser
。。。
辅助APIs
 ADsGEtObject
 ADsBuildEnumerator
 ADsEnumerateNext
 ADsFreeEnumerator
...

配置信息可写在 Current_User 或 All_User里以区分

1.打开文件,注册键值以及其他内核对象时,使用最小的操作所需的访问权限
2.当不能创建或者修改一个对象时,测试被拒绝访问的条件并提供一个预备的执行路径
3.当系统可能甚至拒绝应用程序读访问时,为所有的设置提供硬性编码的defaul value

没有写访问HKEY_LOCAL_MACHINE 或 CSIDL_COMMON_APPDATA 的User 几乎都具有写入 CSIDL_APPDATA 和 GetTempPath() 文件夹的权限

#1


我的意思是:

1)怎样得到当前用户的操作权限,以判断用户是否有权限安装程序?

2)要使程序只能被当前安装的用户使用该如何做?如果要让它同时可以让其他用户使用又该如何做呢?

3)配置信息该怎样保存,才可以被其他低权限的用户读取或修改?

这样就比较清楚了吧。

敬候答复。

#2


The GetUserName function retrieves the user name of the current thread. This is the name of the user currently logged onto the system. 

BOOL GetUserName(

    LPTSTR lpBuffer, // address of name buffer 
    LPDWORD nSize  // address of size of name buffer 
   );
 

Parameters

lpBuffer

Points to the buffer to receive the null-terminated string containing the user's logon name. If this buffer is not large enough to contain the entire user name, the function fails. 

nSize

Pointer to a DWORD that, on input, specifies the maximum size, in characters, of the buffer specified by the lpBuffer parameter. If this buffer is not large enough to contain the entire user name, the function fails. If the function succeeds, it will place the number of characters copied to the buffer into the DWORD that nSize points to. 

 

Return Values

If the function succeeds, the return value is nonzero, and the variable pointed to by nSize contains the number of characters copied to the buffer specified by lpBuffer, including the terminating null character. 
If the function fails, the return value is zero. To get extended error information, call GetLastError. 

Remarks

If the current thread is impersonating another client, the GetUserName function returns the user name of the client that the thread is impersonating. 

See Also

LookupAccountName

#3


To: songhtao(三十年孤独)
    感谢您的答复,但是我想知道的并不是如何得到当前用户名。
    我的意思是:
    当用户安装我的软件时,我如何知道该用户的账号具有可以安装的权限?
    当用户安装我的软件是为了只自己使用时,软件在注册表、配置文件的放置等方面和允许其他用户共同使用时有什么区别?
    因为2000下不是每个用户都是独立的吗?我怎么才能实现这样的管理呢?


企盼您的答复。

#4


安装的权限?2000下有怎么样的权限划分么?
你自己控制吧?取得用户名以后判断,是本机注册用户就用所有权限。

#5


若安装权不够2000会自己提示的,当然你自己可以拦截,如你在安装中要操作注册表,就要考虑失败的情况。
获得用户信息可用活动目录服务接口(ADSI)如
常用接口:
 IADsComputer
 IADSDomain
 IADsGroup
 IADsUser
。。。
辅助APIs
 ADsGEtObject
 ADsBuildEnumerator
 ADsEnumerateNext
 ADsFreeEnumerator
...

配置信息可写在 Current_User 或 All_User里以区分

1.打开文件,注册键值以及其他内核对象时,使用最小的操作所需的访问权限
2.当不能创建或者修改一个对象时,测试被拒绝访问的条件并提供一个预备的执行路径
3.当系统可能甚至拒绝应用程序读访问时,为所有的设置提供硬性编码的defaul value

没有写访问HKEY_LOCAL_MACHINE 或 CSIDL_COMMON_APPDATA 的User 几乎都具有写入 CSIDL_APPDATA 和 GetTempPath() 文件夹的权限