Turns out you don't need that RequestAccessAsync. Everything is works without it, you just need correct interface to call the method.
Adding these things will make border to go away:
typedef struct IGraphicsCaptureSession3 IGraphicsCaptureSession3;
struct IGraphicsCaptureSession3Vtbl {
IInspectable_Parent(IGraphicsCaptureSession3);
HRESULT(STDMETHODCALLTYPE* get_IsBorderRequired)(IGraphicsCaptureSession3* this, char* value);
HRESULT(STDMETHODCALLTYPE* put_IsBorderRequired)(IGraphicsCaptureSession3* this, char value);
};
VTBL(IGraphicsCaptureSession3);
DEFINE_GUID(IID_IGraphicsCaptureSession3, 0xf2cdd966, 0x22ae, 0x5ea1, 0x95, 0x96, 0x3a, 0x28, 0x93, 0x44, 0xc3, 0xbe);
...
IGraphicsCaptureSession3* Session3;
if (SUCCEEDED(Session->vtbl->QueryInterface(Session, &IID_IGraphicsCaptureSession3, (LPVOID*)&Session3)))
{
HR(Session3->vtbl->put_IsBorderRequired(Session3, (char)WithBorder));
Session3->vtbl->Release(Session3);
}
Martins, you're the man.
Thank you very much for your assistance. It works perfectly now!