__deref_out_opt和__deref_opt_out有什么区别?

Joh*_*ohn 5 windows annotations static-analysis microsoft-sal

以下SAL注释有什么区别?

void foo(__deref_out_opt PSTR* bar);

void foo(__deref_opt_out PSTR* bar);
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 5

PSTR*出参数表示调用者传递在接收一个指向一个字符串的缓冲区。

在 __deref_out_opt 中,字符串是可选的(函数将 NULL 放入调用者提供的缓冲区中)。

在 __deref_opt_out 中,缓冲区是可选的(调用者传递 NULL 以表示对输出值不感兴趣)。

据推测,可以将这些概念结合起来,应该有一个__deref_opt_out_opt修饰符。