Skip to main content

TEEC_OpenSession

Function TEEC_OpenSession 

Source
#[unsafe(no_mangle)]
pub extern "C" fn TEEC_OpenSession( ctx: *mut TEEC_Context, session: *mut TEEC_Session, destination: *const TEEC_UUID, connection_method: u32, _connection_data: *const c_void, operation: *mut TEEC_Operation, ret_origin: *mut u32, ) -> TEEC_Result
Expand description

TEEC_OpenSession() - 与指定的受信任应用打开一个新会话。

@param ctx 已初始化的 TEE 上下文,在其作用域内打开会话。 @param session 要初始化的会话结构体指针。 @param destination 标识要打开会话的受信任应用的 UUID 结构。 @param connection_method 要使用的连接方法。 @param connection_data 与所选连接方法有关的连接数据。本实现不支持, 应设置为 NULL。 @param operation 用于会话的操作结构。若不需要则传入 NULL。 @param ret_origin 若函数返回非 TEEC_SUCCESS,此参数将保存错误来源。

@return TEEC_SUCCESS 成功打开会话。 @return TEEC_Result 出现错误。

Examples found in repository?
examples/cc-teec.rs (lines 82-90)
70    fn new(uuid: &raw::TEEC_UUID) -> Result<Self> {
71        // SAFETY: `TEEC_Context` 和 `TEEC_Session` 是 POD 类型,没有无效的位模式。
72        // `mem::zeroed()` 在这里是安全的,因为这些结构体只包含整数和指针。
73        let mut ctx: Box<raw::TEEC_Context> = Box::new(unsafe { mem::zeroed() });
74        let mut session: raw::TEEC_Session = unsafe { mem::zeroed() };
75        let mut origin = 0_u32;
76
77        let res = TEEC_InitializeContext(ptr::null(), ctx.as_mut());
78        if res != raw::TEEC_SUCCESS {
79            return Err(Error::from_raw_os_error(res as i32));
80        }
81
82        let res = TEEC_OpenSession(
83            ctx.as_mut(),
84            &mut session,
85            uuid,
86            raw::TEEC_LOGIN_PUBLIC,
87            ptr::null(),
88            ptr::null_mut(),
89            &mut origin,
90        );
91
92        if res != raw::TEEC_SUCCESS {
93            TEEC_FinalizeContext(ctx.as_mut());
94            return Err(Error::from_raw_os_error(res as i32));
95        }
96
97        Ok(Self { ctx, session })
98    }