Не уверен насчет получения IntPtr в массив, но вы можете скопировать данные для использования с неуправляемым кодом с помощью Mashal.Copy:
IntPtr unmanagedPointer = Marshal.AllocHGlobal(bytes.Length);
Marshal.Copy(bytes, 0, unmanagedPointer, bytes.Length);
// Call unmanaged code
Marshal.FreeHGlobal(unmanagedPointer);
В качестве альтернативы вы можете объявить структуру с одним свойством, а затем использовать Marshal.PtrToStructure, но это все равно потребует выделения неуправляемой памяти.
Редактировать: Кроме того, как отметил Тьялис, вы также можете использовать fixed , если вам нужен небезопасный код