Wrong forum, but anyway.
It's not giving you PROCESS_ALL_ACCESS, that's all. Use PROCESS_VM_WRITE instead.
By the way, (void*)0x30FF3AC will most likely not work (if it did work, it'd be simply by chance).
And (void*)600 will definitely not work.
And valueToWrite is not declared.
Yeah I realized that last thing afterwords.
Keep in mind I just took a skeleton code, worked out some bugs with the FindWindow function, added the tests, and tried it. I'm not very good with the Windows API. Here's the original code, followed by mine with the declaration included.
You maybe mean (void*)&valueToWrite and if you want to write he value 600 to 0x30FF3AC you can't use {0x90, 0x90} ({144, 144}). 600 would be 0x58, 0x02
If valueToWrite is declared as BYTE valueToWrite[] he can't use (void*)&valueToWrite (that would be a pointer to the pointer to the array).
However, it'd be easier to change the declaration to short valueToWrite=600.