I need to call VirtualAllocEx and it returns IntPtr.
I call that function to get an empty address so I can write my codecave there(this is in another process).
How do I convert the result into UInt32,so I could call WriteProcessMemory() lately with that address?
You could just cast it with (uint)ptr I believe (If it won’t cast nicely, try ptr.ToInt32() or ToInt64() first. At least I don’t know of any issues with this approach, haven’t used it -that- much though. Given UInt32 has larger range than Int32 and same as Int64 on non-negative side it should be good enough.
Although not sure how the Int32 behaves on 64 bit architectures. Badly I’d imagine as the reason for IntPtr is to provide platform independant way to store pointers.