¿Cómo puedo pasar los datos de MemoryStream a una DLL de C ++ no administrada usando P / Invoke?

Necesito tu ayuda con el siguiente escenario:

Estoy leyendo algunos datos del hardware a un MemoryStream (C #) y necesito pasar estos datos en la memoria a un dll implementado en C ++ no administrado (usando el puntero ??). Los datos leídos (en secuencia) son muy grandes (megabytes). Entiendo que puedo P / Invocar esta dll pero, ¿no estoy seguro de cómo pasar el puntero / referencia de los datos de transmisión a la API de C ++?

Debo admitir que estoy confundido ya que soy nuevo en C #. ¿Debo usar inseguro / fijo ya que los datos son grandes o irrelevantes ya que el objeto MemoryStream es administrado por GC? Algún ejemplo de código / descripción detallada sería muy útil. Gracias

Firma de la API no administrada:

BOOL doSomething (void * rawData, int dataLength)

Respuestas a la pregunta(1)

Su respuesta a la pregunta