Well, now that I'm looking at the correct declare in MSDN, I might have a solution for you. lppPrinterNotifyInfo is looking for a pointer to a structure, correct? Correct. Now, after thinking this through, one can't expect the Win32 API to be able to access a managed structure using a pointer, so what you have to do is marshal that structure to unmanaged memory using Marshal.StructureToPtr(). You can use the Marshal.SizeOf method to get the size of the managed structure, and then allocate the neccessary memory using AllocHGlobal before you call StructureToPtr. This'll give you a pointer which you can then pass to FindNextPrinterChangeNotification, hopefully. Then just call Marshal.PtrToStructure to get the managed structure back.
God I hope this works...
[edit]And yeah, I'm sure you have a better method Divil. So feel free to make me look bad. ;)[/edit]