After many successful dual-boot installs involving Slak and Windows, I believe I can help here.
The problem, I'm afraid, doesn't lie in the setup of your partitions, as others have been suggesting. Your drives are configured just fine. The problem is in your lilo.conf file. You almost had it right at one point, but there was still a problem with it (likely not on purpose, but sometimes those of us who try to help others out with their computer problems are lazy and/or forget to double-check everything before posting...
Your Windows boot info in lilo.conf should look like this:
# Windows bootable partition config begins <-- This line is a comment.
other = /dev/sda1 <-- Boot non-Linux OS from here.
label = Windows <-- The name shwon in the boot menu.
table = /dev/sda <-- The partition table is on this device.
# Windows bootable partition config ends <-- This line is a comment.
That there should work fine. The problem you were having before was that you were trying to mount the Windows drive/partition as read-only, an option which isn't really even available outside of a Linux boot to begin with.
That should be enough to get it working. But if you read on, I'll try to explain *why* you want to set it up this way.
Here's what a good Linux boot should look like:
# Linux bootable partition config begins <-- This line is a comment.
image = /boot/vmlinux-220.127.116.11 <-- Boot a Linux OS.
root = /dev/sda3 <-- Mount this partition at /.
label = Slak18.104.22.168 <-- The name shwon in the boot menu.
read-only <-- Mount / in read-only mode for checking.
# Linux bootable partition config ends <-- This line is a comment.
Now, of course what you have in "image" will be different from what I have, because you're probably not using kernel 22.214.171.124, which as of last night was the most recent version in the 2.6 line. But this is a good example of a working LINUX partition configuration. Notice any differences?
"image" is used when you have a Linux (or Linux-style, but that's going way too complicated) kernel that LILO can boot and then use to start the rest of your system. It tells LILO "Load the kernel image you'll find here, and use it to boot the OS." Since LILO knows how to boot Linux, this works with the Linux kernel.
"other", on the other hand, is used when you have anything that ISN'T Linux - Windows, or another boot-loader, for example - that you want to boot. LILO doesn't handle loading the boot code itself - it simply tells the machine to try to boot from whatever location you tell it in "other". Windows has its own boot-loader, and LILO simply hands over the computer to the Windows loader (ntldr is one part of this for Windows NT, 2000, and XP, along with a handful of others... msdos.sys and io.sys do the same thing for DOS/Win9x, though together they also tend to double as the "DOS kernel" itself...).
As for the "root" and "table" options, "root" simply tells LILO what to pass the Linux kernel that it's booting in order to tell it what partition to mount at /. This information should be in /etc/fstab on the line with just "/" as the mount point. It'll be pretty obvious, since it's the only place in the file that a "/" exists alone between whitespace. "table" theoretically *could* be used for Linux OS boots, but all it does is tell LILO where to find the partition table to pass to the other boot-loader, and Linux reads that info on its own. Windows, however, needs a bit of help with it, and so LILO is kind enough to pass that information on.
If you have any other questions, or if I confused the hell out of you just now, feel free to contact me and make me explain myself. Good luck with your Windows booting experience, and enjoy Slackware Linux!