我是一个rust的新手,我想通过netuseradd函数来给主机添加新的用户,但是却出现了一些问题。我现在需要的是把一个结构体变量 ui:USER_INFO_1 转成 *mut u8,也就是输出这个变量的地址 ,但是总是不成功。其中关键代码如下
unsafe{
let username = String::from("Administrtator@123");
let mut name = str_to_pwstr(&username);
let ui = USER_INFO_1 {
usri1_name:name, //PWSTR结构体
usri1_password: name,
usri1_password_age: 0,
usri1_priv:USER_PRIV_USER,
usri1_home_dir: PWSTR::NULL ,
usri1_comment: PWSTR::NULL,
usri1_flags: USER_ACCOUNT_FLAGS(UF_NORMAL_ACCOUNT),
usri1_script_path: PWSTR::NULL,
};
NetUserAdd(PWSTR::NULL,2,ui,ptr::null_mut()); //问题出在这里
};
其中NetuserAdd函数的结构体如下
pub unsafe fn NetUserAdd<'a>(
servername: impl IntoParam<'a, PWSTR>,
level: u32,
buf: *mut u8,
parm_err: *mut u32
) -> u32
但是他报错提示类型不匹配 `
error[E0308]: mismatched types
--> src\main.rs:44:34
|
44 | NetUserAdd(PWSTR::NULL,2,ui,ptr::null_mut());
| ^^ expected *-ptr, found struct `USER_INFO_1`
|
= note: expected raw pointer `*mut u8`
found struct `USER_INFO_1
我尝试用std::mem::transmute来进行转化,但也失败了,不知道哪里出了问题,希望大家能帮忙看下,十分感谢。
1
共 1 条评论, 1 页
评论区
写评论这两种应该都可以
前一种要unsafe,后一种不用。