Get the image:
i = Import["http://exampledata.wolfram.com/coneflower.jpg"];
Define regions for: the whole image, the window disk, the black dot disk:
imRegion = Rectangle[{0, 0}, ImageDimensions[i]]
disk1 = Disk[{80, 60}, 40];
disk2 = Disk[{80, 60}, 10];
Window by changing everything in imRegion
but not in disk1
Black:
windowed = ImageApply[{0, 0, 0} &, i, Masking -> RegionDifference[imRegion, disk1]]

Dot by changing everything in disk2
to Black:
dotted = ImageApply[{0, 0, 0} &, windowed, Masking -> disk2]

Done knowing what result you want before starting, we can just skip to defining your region of interest as an Annulus:
roi = Annulus[{80, 60}, {10, 40}];
viewRoI = ImageApply[{0, 0, 0} &, i, Masking -> RegionDifference[imRegion, roi]]
This returns the same as the dotted version of windowed, so I won't add another image.
EDIT:
There was a request to move away from using Region, because so much of Region support is new (and not implemented in old versions).
We can use ImageApplyIndexed to achieve this effect as long as we keep the "Regions" of interest simple enough that it is easy to test if a coordinate pair lies in the region.
Our Version 10 - robust method looks like this:
Define an image:
i = RandomImage[1, {150, 113}, ColorSpace -> "RGB"];
Define some parameters to characterize the disks:
{d1Center, d1Radius} = {{50, 80}, 40};
{d2Center, d2Radius} = {{50, 80}, 10};
- Note that because of how ImageApplyIndexed feeds pixel coordinates, the center here is specified as {"row from top", "column from left"}.
Now we turn all pixels not in disk 1 Black:
windowed = ImageApplyIndexed[If[EuclideanDistance[#2, d1Center] > d1Radius, {0, 0, 0}, #1] &, i]
And then turn just the pixels in disk2 Black:
dotted = ImageApplyIndexed[If[EuclideanDistance[#2, d2Center] > d2Radius, #1, {0, 0, 0}] &, windowed]
HighlightImage[i, {DiskRec[45, 40, 30], {Black, EdgeForm[Thick], Opacity[1], DiskRec[45, 40, 30]}}, {"Darken", .5}]
$\endgroup$