PInvoke is a new entry in Silverlight 5.0 runtime. For the one that are not aware of what is pInvoke I will say it stands for "Platform Invoke". It is a set of classess and attributes that allows the Silverlight runtime to access the low-level Win32 API of Windows Operating System.
After Silverlight 4.0 brought COM interop in Silverlight, the team decided to accomplish the last step and integrate also pInvoke. As you understand, it is only restricted to Windows OS, but is some scenario it may be a very useful thing to cross the subtle line from "can't do" to "can do". Wether you have to detect USB keys, interact with devices and so on, pInvoke require you to directly access the API preparing the mapping to the OS funzions and handling unmanaged resources.
As a littel sample I ported an old example to Silverlight. The code below implements a simple funzion that is able to take a screenshot of the desktop.
1: public static class ScreenCapture
2: {
3: public static WriteableBitmap GetDesktopImage()
4: {
5: WriteableBitmap bmap = null;
6:
7: // initialize unmanager pointers
8: IntPtr hDC = IntPtr.Zero,
9: hMemDC = IntPtr.Zero,
10: desktop = IntPtr.Zero;
11:
12: try
13: {
14: // get a reference to desktop
15: desktop = User32.GetDesktopWindow();
16: // get an handle to Device Context
17: hDC = User32.GetDC(desktop);
Read more: Silverlight & XAML Playground
QR: