There are a lot of reasons why you should avoid hosting Wordpress on a Windows/IIS server, but sometimes you have no choice. One of the most common issues when getting a Wordpress site up and running on IIS is that the image uploader tends to be broken out of the box. The cause and solution for this problem can vary greatly, but generally it has to do with file system permissions on the Windows box. If you are completely unable to upload an image through Wordpress and are greeted with an error along the lines of:
The uploaded file could not be moved to C:\Some\Directory
There is a strong chance that the following steps will correct the issue for you.
Step 1) wp-content permissions
The first step is to adjust the folder permissions on the wp-content folder of your Wordpress installation. To do that, navigate to your blog installation directory and right click on the wp-content folder and choose “Properties”. Next, click the Security tab.
On the wp-content properties dialog, click the Edit button to change the file permissions. On the following screen, look for an account labeled IUSR. Note that this is not the same as IIS_IUSRS. If IUSR exists, select it and grant it “Modify” permissions if it does not have them already. If the account does not exist, click the “Add” button to add it, then grant it “Modify” permissions. When you’re finished hit OK.
Step 2) PHP Temp folder permissions
The second step is to adjust the folder permissions on the Temp directory that PHP uses when uploading images. By default, this directory is C:\Windows\Temp but if your php.ini file was edited to modify that folder, use the modified directory. Navigate to C:\Windows and right click the “Temp” folder then choose “Properties”. Next click the Security tab.
On the Temp properties dialog, click the Edit button to change the file permissions. On the following screen, look for an account labeled IIS_IUSRS. Note that this is different than the steps above. If IIS_IUSRS exists, select it and grant it “Read” permissions. If the account does not exist, click the “Add” button to add it, then grant it “Read” permissions. When you’re finished hit OK.
That should take care of the problem in most cases. That said, there are many different circumstances that can produce this issue but hopefully this was the answer for you as it was for me.