Sorry, I think I was hitting the crackrocks a little too hard.  

Yes, `MemoryPointer` allocates.  

`Pointer` *can* take ownership, but only does so by default when you `dup` or `clone` an existing pointer (which internally sets `autorelease` to `true`).  You can set `.autorelease = true` to take ownership, but as you've noted you can't use the CRT to free Windows memory or all hell breaks loose.  I had completely forgotten about that finer point since it's been so long -- thanks for the reminder.  Maybe I should dig up Petzold's book for a refresher ;0

Note that the [rubydoc.info docs for Pointer](http://rubydoc.info/github/ffi/ffi/FFI/Pointer) are not quite right wrt to `autorelease`, which you'll notice when you look at the [code](https://github.com/ffi/ffi/blob/master/ext/ffi_c/Pointer.c#L185) to find the one spot where it's set is in `ptr_initialize_copy`.

Technically `MemoryPointer` *is* derived from `Pointer`, but I'm not sure how the `ctor` inheritance works in Ruby -- something for me to read up on.

Anyhow, yeah, you're 100% right -- sorry.